directory search
Guides Access control CORS Authentication Browser detection using the user agent Caching Caching FAQ Compression Conditional requests Connection management in HTTP 1.x Content negotiation Content negotiation: List of default Accept values Cookies CSP Messages Overview Protocol upgrade mechanism Proxy servers and tunneling Proxy servers and tunneling: Proxy Auto-Configuration (PAC) file Public Key Pinning Range requests Redirections Resources and specifications Resources and URIs Response codes Server-Side Access Control Session Guides: Basics Basics of HTTP Choosing between www and non-www URLs Data URIs Evolution of HTTP Identifying resources on the Web MIME Types MIME types: Complete list of MIME types CSP Content-Security-Policy Content-Security-Policy-Report-Only CSP: base-uri CSP: block-all-mixed-content CSP: child-src CSP: connect-src CSP: default-src CSP: font-src CSP: form-action CSP: frame-ancestors CSP: frame-src CSP: img-src CSP: manifest-src CSP: media-src CSP: object-src CSP: plugin-types CSP: referrer CSP: report-uri CSP: require-sri-for CSP: sandbox CSP: script-src CSP: style-src CSP: upgrade-insecure-requests CSP: worker-src Headers Accept Accept-Charset Accept-Encoding Accept-Language Accept-Ranges Access-Control-Allow-Credentials Access-Control-Allow-Headers Access-Control-Allow-Methods Access-Control-Allow-Origin Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Request-Headers Access-Control-Request-Method Age Allow Authorization Cache-Control Connection Content-Disposition Content-Encoding Content-Language Content-Length Content-Location Content-Range Content-Type Cookie Cookie2 Date DNT ETag Expect Expires Forwarded From Headers Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Keep-Alive Large-Allocation Last-Modified Location Origin Pragma Proxy-Authenticate Proxy-Authorization Public-Key-Pins Public-Key-Pins-Report-Only Range Referer Referrer-Policy Retry-After Server Set-Cookie Set-Cookie2 SourceMap Strict-Transport-Security TE Tk Trailer Transfer-Encoding Upgrade-Insecure-Requests User-Agent User-Agent: Firefox Vary Via Warning WWW-Authenticate X-Content-Type-Options X-DNS-Prefetch-Control X-Forwarded-For X-Forwarded-Host X-Forwarded-Proto X-Frame-Options X-XSS-Protection Methods CONNECT DELETE GET HEAD Methods OPTIONS PATCH POST PUT Status 100 Continue 101 Switching Protocols 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 307 Temporary Redirect 308 Permanent Redirect 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Payload Too Large 414 URI Too Long 415 Unsupported Media Type 416 Range Not Satisfiable 417 Expectation Failed 426 Upgrade Required 428 Precondition Required 429 Too Many Requests 431 Request Header Fields Too Large 451 Unavailable For Legal Reasons 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 511 Network Authentication Required Status
characters

HTTP消息是数据在服务器和客户端之间交换的方式。有两种类型的消息:请求客户端发送到触发服务器上的动作,并且响应,从服务器的答案。

HTTP消息由以ASCII编码的文本信息组成,并跨越多行。在HTTP / 1.1及其早期版本的协议中,这些消息是通过连接公开发送的。在HTTP / 2中,曾经人类可读的消息现在被划分为HTTP帧,从而提供优化和性能改进。

Web开发人员或网站管理员很少制作这些文本HTTP消息:软件,Web浏览器,代理或Web服务器,执行此操作。他们通过配置文件(代理或服务器),API(浏览器)或其他接口提供HTTP消息。

HTTP / 2二进制组帧机制被设计为不需要对应用的API或配置文件进行任何修改:它对用户来说是广泛透明的。

HTTP请求和响应共享相似的结构并由以下部分组成:

  1. 一个起始行描述的要求来实现,或者它无论成功或失败的状态。这条起始线总是一条线。

  2. 一组可选的HTTP标头,用于指定请求或描述消息中包含的主体。

  3. 表示请求的所有元信息的空白行已经发送。

  4. 包含与请求相关的数据的可选主体(如HTML表单的内容)或与响应关联的文档。主体和其大小的存在由开始行和HTTP标头指定。

HTTP消息的起始行和HTTP标头统称为请求,而其有效负载称为主体

HTTP请求

开始行

HTTP请求是客户端发送的消息,以在服务器上启动一个操作。他们的起点包含三个要素:

1.一个HTTP方法,动词(例如GETPUTPOST),或者名词(像HEADOPTIONS要被执行),描述动作。例如,GET表示应该提取资源或者POST意味着数据被推送到服务器(创建或修改资源或生成临时文档以发回)。

2.所述请求对象,通常是一个URL,或协议,端口和域的绝对路径通常特征在于请求上下文。这个请求目标的格式因不同的HTTP方法而异。有可能

  • 绝对路径,最后是一个'?'查询字符串。这是最常见的形式,被称为起源形式,并用于与GETPOSTHEAD,和OPTIONS方法。 POST / HTTP 1.1 GET /background.png HTTP/1.0 HEAD /test.html?query=alibaba HTTP/1.1 OPTIONS /anypage.html HTTP/1.0

  • 当连接到代理服务器时,完整的URL称为绝对表单,主要用于GETGET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

  • URL的权威组成部分由域名和可选的端口(前缀为a ':')组成,称为权威表单。它仅CONNECT在设置HTTP隧道时使用。 CONNECT developer.mozilla.org:80 HTTP/1.1

  • 星号形式,一个简单的星号('*')用于OPTIONS表示该服务器作为一个整体。 OPTIONS * HTTP/1.1

   3.HTTP版本,它定义了剩余的消息的结构,充当的预期版本的指示符以用于响应。

报头

来自请求的HTTP标头遵循HTTP标头的相同基本结构:不区分大小写的字符串,后跟冒号(':')和结构取决于标头的值。包括该值在内的整个标题由一条单独的行组成,该行可能相当长。

有许多请求头可用。他们可以分成几组:

  • 一般标题,如Via整个应用于邮件。

  • 请求标头,比如User-Agent,通过给定上下文(比如)或者通过有条件地限制它(比如)Accept-Type来进一步指定它(比如Accept-Language)来修改请求。RefererIf-None

  • 实体标题,如Content-Length适用于请求的主体。显然,如果请求中没有主体,则不会传输此头。

主体

请求的最后部分是它的主体。并非所有的请求有一个:获取资源,如请求GETHEAD,DELETE,或选项,通常不需要一个。有些请求会将数据发送到服务器以更新它:与POST请求(包含HTML表单数据)的情况相同。

主体大致可以分为两类:

  • 单资源主体,由一个单一文件组成,由两个标头定义:Content-TypeContent-Length

  • 多资源主体,由多部分主体组成,每个主体包含不同位的信息。这通常与HTML表单相关联。

HTTP响应

状态行

HTTP响应的起始行(称为状态行)包含以下信息:

  1. 协议版本:通常为HTTP/1.1

  2. 状态码:指示请求的成功或失败。常见的状态代码为200404302

  3. 一个状态文本:简要的,纯粹的信息性的状态代码的文本描述,以帮助人们理解HTTP消息。

典型的状态行如下所示: HTTP/1.1 404 Not Found.

报头

响应的HTTP头与其他报头的结构相同:不区分大小写的字符串,后跟冒号(':')和结构取决于头部类型的值。包括其价值在内的整个表头呈现为一条线。

有许多响应头可用。这些可以分成几个组:

  • 一般报头,如Via适用于整个消息。

  • 响应报头VaryAccept-Ranges提供有关不适合状态行的服务器的其他信息。

  • 实体报头,如Content-Length适用于请求的主体。当请求中没有主体时显然不会传输这样的头文件。

主体

答复的最后部分是主体。并不是所有的答复都是:有状态代码的答复,就像201204通常不会。

主体大致可以分为三类:

  • 单一资源主体,由一个已知长度的单个文件组成,由两个标头定义:Content-TypeContent-Length

  • 单一资源主体,由一个长度未知的单个文件组成,由块Transfer-Encoding设置为chunked

  • 多资源主体,由多部分主体组成,每个主体包含不同的信息部分。这些比较少见。

HTTP / 2帧

HTTP / 1.x消息在性能方面有一些缺点:

  • 与主体不同,标题是未压缩的。

  • 从一条消息到另一条消息,标题通常非常相似,但仍然在连接中重复。

  • 不能多路复用。多个连接需要在同一台服务器上打开:热TCP连接比冷连接更有效。

HTTP / 2引入了一个额外的步骤:它将HTTP / 1.x消息分成嵌入流中的帧。数据和标题帧是分开的,这允许标题压缩。多个流可以组合在一起,这个过程称为多路复用,允许更高效的底层TCP连接。

HTTP框架现在对Web开发人员是透明的。这是HTTP / 2中HTTP / 1.1消息和底层传输协议之间的附加步骤。Web开发人员使用HTTP帧所使用的API不需要进行任何更改; 当浏览器和服务器都可用时,HTTP / 2将打开并使用。

结论

HTTP消息是使用HTTP的关键; 它们的结构很简单,而且它们具有高度的可扩展性。HTTP / 2成帧机制在HTTP / 1.x语法和底层传输协议之间添加了一个新的中间层,而不需要从根本上对其进行修改:基于成熟的机制。

Previous article: Next article: