有些首部,不管是请求还是响应都会出现他们的身影,我们把他们归类为通用首部。常见通用首部如下表格所示:
首部 说明Cache-Control 通过指定指令来实现缓存机制
Connection Connection 头(header) 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成:
Connection: keep-alive
Connection: close
Data 提供报文创建的时间
MIME-Version 提供发送端使用的MIME版本
Trailer 允许发送方在分块发送的消息后面添加额外的元信息,这些元信息可能是随着消息主体的发送动态生成的,比如消息的完整性校验,消息的数字签名,或者消息经过处理之后的最终状态等。
Transfer-Encoding 告知接收端报文的编码方式
Upgrade 允许客户端指定它支持并且希望使用的通信协议,如果服务器认为适合,则切换协议,服务器必须使用101(交换协议)中的Upgrade标头字段响应,以知识正在交换的协议。
Via 显示报文经过的中间节点,用来追踪消息转发情况,防止循环请求,以及识别在请求或响应传递链中消息发送者对于协议的支持能力
Warning 包含报文当前状态可能存在的问题。在响应中可以出现多个 Warning 首部。一般来说, Warning 首部可以应用于任何类型的报文。然而一部分警告码(warn-code)是为缓存代理服务器定制的,并且只可以应用在响应报文中。
3.3.2、请求首部
客户端通过传递请求头字段,将有关请求以及有关客户端本身的其他信息传递给服务器,这些字段充当请求修饰符,其语义等同于编程语言方法调用中的参数。
常见的请求头如下:
Accept首部 首部 说明Accept 表明客户端能够接受的媒体类型
Accept-Charset 表明客户端能够接受的字符集
Accept-Encoding 表明客户端能够接受的编码方式
Accept-Language Section 14.4
TE 表明客户端能够接受的扩展传输编码
条件请求首部 首部 说明
Expect 指示客户端要求特定的服务器行为
目前规范中只规定了 "100-continue" 这一个期望条件:通知接收方客户端要发送一个体积可能很大的消息体,期望收到状态码为100 (Continue) 的临时回复
If-Match 请求首部 If-Match 的使用表示这是一个条件请求。在请求方法为 GET 和 HEAD 的情况下,服务器仅在请求的资源满足此首部列出的 ETag值时才会返回资源。而对于 PUT 或其他非安全方法来说,只有在满足条件的情况下才可以将资源上传。
If-Modified-Since If-Modified-Since 是一个条件式请求首部,服务器只在所请求的资源在给定的日期时间之后对内容进行过修改的情况下才会将资源返回,状态码为 200 。如果请求的资源从那时起未经修改,那么返回一个不带有消息主体的 304 响应,而在 Last-Modified 首部中会带有上次修改时间。 不同于 If-Unmodified-Since, If-Modified-Since 只可以用在GET 或 HEAD 请求中。
If-None-Match 对于 GET 和 HEAD 请求方法来说,当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的相匹配的时候,服务器端会才返回所请求的资源,响应码为 200。对于其他方法来说,当且仅当最终确认没有已存在的资源的 ETag 属性值与这个首部中所列出的相匹配的时候,才会对请求进行相应的处理。
If-Range If-Range HTTP 请求头字段用来使得 Range 头字段在一定条件下起作用:当字段值中的条件得到满足时,Range 头字段才会起作用,同时服务器回复206 部分内容状态码,以及Range 头字段请求的相应部分;如果字段值中的条件没有得到满足,服务器将会返回 200 OK 状态码,并返回完整的请求资源。
If-Unmodified-Since HTTP协议中的 If-Unmodified-Since 消息头用于请求之中,使得当前请求成为条件式请求:只有当资源在指定的时间之后没有进行过修改的情况下,服务器才会返回请求的资源,或是接受 POST 或其他 non-safe 方法的请求。如果所请求的资源在指定的时间之后发生了修改,那么会返回 412 (Precondition Failed) 错误。
Range The Range 是一个请求首部,告知服务器返回文件的哪一部分。在一个 Range 首部中,可以一次性请求多个部分,服务器会以 multipart 文件的形式将其返回。如果服务器返回的是范围响应,需要使用 206 Partial Content 状态码。假如所请求的范围不合法,那么服务器会返回 416 Range Not Satisfiable 状态码,表示客户端错误。服务器允许忽略 Range 首部,从而返回整个文件,状态码用 200 。
安全请求首部 首部 说明
Authorization HTTP协议中的 Authorization 请求消息头含有服务器用于验证用户代理身份的凭证,通常会在服务器返回401 Unauthorized 状态码以及WWW-Authenticate 消息头之后在后续请求中发送此消息头。
Cookie Cookie 是一个请求首部,其中含有先前由服务器通过 Set-Cookie 首部投放并存储到客户端的 HTTP cookies。
Cookie2 这个已经被废弃的 Cookie2 请求首部曾经被用来告知浏览器该用户代理支持“新型” cookies,但是现代的用户代理一般使用 Cookie 来替代 Cookie2。
代理请求首部 首部 说明
Max-Forwards 在通往源端服务器的路径上,将请求转发给其他代理或者网关的最大次数,与TRACE方法类似。
Proxy-Authorization Proxy-Authorization 是一个请求首部,其中包含了用户代理提供给代理服务器的用于身份验证的凭证。这个首部通常是在服务器返回了 407 Proxy Authentication Required 响应状态码及 Proxy-Authenticate 首部后发送的。
Proxy-Connection 同Connection,不过这个首部是在与代理建立连接时使用。
3.3.3、响应首部 首部 说明
Age Age 消息头里包含对象在缓存代理中存贮的时长,以秒为单位。
Age的值通常接近于0。表示此对象刚刚从原始服务器获取不久;其他的值则是表示代理服务器当前的系统时间与此应答中的通用头 Date 的值之差。
Retry-After 在HTTP协议中,响应首部 Retry-After 表示用户代理需要等待多长时间之后才能继续发送请求。这个首部主要应用于以下两种场景:
- 当与 503 响应一起发送的时候,表示服务下线的预期时长;
- 当与重定向响应一起发送的时候,比如 301 (Moved Permanently,永久迁移),表示用户代理在发送重定向请求之前需要等待的最短时间。
Server Server 首部包含了处理请求的源头服务器所用到的软件相关信息。
避免描述的过于详细,因为这有可能泄露服务器内部实现细节,或者被攻击者找到已知安全漏洞。
Title 对于HTML文档来说,就是HTML文案定的源端给出的标题。
该首部定义与原始的 HTTP/1.0草案,并未列入RFC2616。
Warning Warning 是一个通用报文首部,包含报文当前状态可能存在的问题。在响应中可以出现多个 Warning 首部。
一般来说, Warning 首部可以应用于任何类型的报文。然而一部分警告码(warn-code)是为缓存代理服务器定制的,并且只可以应用在响应报文中。格式:
Warning: <warn-code> <warn-agent> <warn-text> [<warn-date>]
协商首部