HTTP报文结构

2019-02-11 11:09:57
linefo
555
最后编辑:linefo 于 2019-02-11 11:12:49
HTTP/1.1以及更早的HTTP协议报文都是语义可读的。在HTTP/2中,这些报文被嵌入到了一个新的二进制结构,帧。帧允许实现很多优化,比如报文头部的压缩和复用。即使只有原始HTTP报文的一部分以HTTP/2发送出来,每条报文的语义依旧不变,客户端会重组原始HTTP/1.1请求。因此用HTTP/1.1格式来理解HTTP/2报文仍旧有效。

有两种HTTP报文的类型,请求与响应,每种都有其特定的格式。

请求

HTTP请求的一个例子:



请求由以下元素组成:

(1)一个HTTP的method,经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为。通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单值(POST方法),虽然在一些情况下也会有其他操作。
(2)要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP一般在80端口)。
(3)HTTP协议版本号。
(4)为服务端表达其他信息的可选头部headers。
(5)对于一些像POST这样的方法,报文的body就包含了发送的资源,这与响应报文的body类似。
响应

HTTP响应的一个例子:



响应报文包含了下面的元素:

(1)HTTP协议版本号。
(2)一个状态码(status code),来告知对应请求执行成功或失败,以及失败的原因。
(3)一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
(4)HTTP headers,与请求头部类似。
(5)可选项,比起请求报文,响应报文中更常见地包含获取的资源body。