HTTP报文首部
HTTP协议的请求和响应报文中必定包含HTTP首部。其提供所需要的信息给客户端和服务器。
HTTP请求报文
下图为请求报文的构成:
示例:
GET /api/v1/zy?pageNo=1&pageSize=10 HTTP/1.1
Host: 121.41.5.5
Connection: keep-alive
Accept: application/json, text/plain, /
Access-Token:xxxxxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
HTTP响应报文
示例:
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Sat, 18 Jul 2020 12:21:59 GMT
Content-Type: application/json
Content-Length: 550
Connection: keep-alive
Content-Encoding: gzip
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
在报文众多的字段当中,HTTP首部字段包含的信息最为丰富,首部字段同时存在于请求和响应报文内,并涵盖HTTP报文相关的内容信息。
HTTP首部字段
HTTP首部字段传递重要信息
HTTP首部字段是构成HTTP报文的要素之一。使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
HTTP首部字段结构
HTTP首部字段是由首部字段名和字段值构成的,中间采用冒号:
分隔。同时字段值可以由多个值构成。
例如:Keep-Alive: timeout=15, max=100
如果HTTO首部字段重复了会如何?
答:这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。
4种HTTP首部字段类型
HTTP首部字段根据实际用途被分为以下4种类型
- 通用首部字段(General Header Fields):请求报文和响应报文都会使用的首部。
- 请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、相应内容相关优先级等信息。
- 响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
- 实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
HTTP/1.1 首部字段一览
HTTP/1.1规范了如下47种首部字段(RFC2616)。
非 HTTP/1.1 的首部字段
我们在HTTP协议通信交互种使用到的首部字段,不限于RFC2616中定义的那47种首部字段,还有Cookie,Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段,使用频率也很高。
这些非正式的首部字段统一归纳在RFC4229 HTTP Header Field Registrations中。
End-to-end首部和Hop-by-hop首部
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。
- 端到端首部(End-to-end Header)
分在此类别中的首部会转发给请求/响应对应的最终接受目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。 - 逐跳首部(Hop-by-hop Header)
分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用hop-by-hop首部,需提供C