1 HTTP 首部字段
-
作用:HTTP 首部字段传递重要信息。
-
结构:字段值可以有多个,用逗号分隔。
-
类别:
-
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部。
-
请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
-
响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加 内容,也会要求客户端附加额外的内容信息。
-
实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更 新时间等与实体有关的信息。
-
1.1 End-to-end 首部和 Hop-by-hop 首部
- 端到端首部(End-to-end Header):分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
- 逐跳首部(Hop-by-hop Header):分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用 hop-by-hop 首部,需提 供 Connection 首部字段。
2 HTTP/1.1 通用首部字段
- 定义:通用首部字段是指,请求报文和响应报文双方都会使用的首部。
2.1 Cache-Control
-
作用:首部字段 Cache-Control 能够控制缓存的行为。
-
格式:
-
Cache-Control 指令一览:
-
-
no-cache与no-store差异:no-cache代表不接受过期的资源,缓存在被使用前会先向源服务器进行有效性确认。no-store 才是真正地不进行缓存。
-
s-maxage:s-maxage指令的功能和max-age指令的相同,它们的不同点是s-maxage指令只适用于供多位用户使用的公共缓存服务器。
-
2.2 Connection
-
作用:
-
控制不再转发给代理的首部字段
-
管理持久连接
-
2.3 Date
-
定义:首部字段 Date 表明创建 HTTP 报文的日期和时间。
2.4 Pragma
-
定义:Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0 的向后兼容而定义。等同于Cache-Control: no-cache
所有的中间服务器如果都能以 HTTP/1.1 为基准,那直接采用 CacheControl: no-cache 指定缓存的处理方式是最为理想的。但要整体掌握全部中间服务器使用的 HTTP 协议版本却是不现实的。因此,发送的请求会同时含有下面两个首部字段。
2.5 Trailer
-
定义:首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段。该首部字段可应用在 HTTP/1.1 版本分块传输编码时。
2.6 Transfer-Encoding
-
定义:首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。HTTP/1.1的传输编码方式仅对分块传输编码有效。
2.7 Upgrade
-
定义:首部字段 Upgrade 用于检测 HTTP 协议及其他协议是否可使用更高的 版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
-
规则:
- 使用首部字段 Upgrade 时,还需要额外指定 Connection:Upgrade。
- 对于附有首部字段 Upgrade 的请求,服务器可用 101 Switching Protocols 状态码作为响应返回。
2.8 Via
-
作用:使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。避免请求回环的发生。
-
流程:报文经过代理或网关时,会先在首部字段 Via 中附加该服务器的信息,然后再进行转发。
2.9 Warning
-
作用:该首部通常会告知用户一些与缓存相关的问题的警告。
-
格式:
-
类别:
3 为 Cookie 服务的首部字段
-
Set-Cookie:
-
格式:
-
字段值的说明:
-
-
Cookie:首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie 时,同样可以以多个Cookie形式发送。