HTTP1.1 Headers速查清单

"HTTP首部及其使用场景解析"

Posted by is Q on June 28, 2020

作为一个程序猿,了解常用的HTTP首部的意思及它的使用场景是必须的,但是由于http首部数量太多,平常经常接触到的就那么一些,不常用的很容易忘记具体意思,为了方便查看特整理如下。

快速导航

http首部主要分为五大部分:

1. 通用首部:各种类型的报文(请求、响应报文)都可以使用,提供有关报文最基本的信息。 2. 请求首部:专用于请求报文的首部,用于给服务器提供相关信息,告诉服务器客户端的期望和能力。 3. 响应首部:专用于响应报文的首部,用于告诉客户端是谁在响应以及响应者的能力。 4. 实体首部:用于描述http报文的负荷(主体),提供了有关实体及其内容的相关信息。 5. 扩展首部:非标准首部,由应用开发者定义的首部。

通用首部

​ 通用首部又可以分为以下几类:

1. 通用信息性首部。 2. 通用缓存首部。

通用信息性首部

  • Connection:客户端和服务器可以指定与请求/响应连接相关选项;connection首部具有两个功能,第一个就是去除标准的逐跳首部(Connection、Transfer-Encoding、TE、Proxy-Authorization、Proxy-Authenticate、Upgrade、Keep-Alive和Trailer),也就是去掉不再转发给代理的首部,这些需要去除的首部在Connection首部中列出;第二个就是保持持久连接,HTTP1.1默认就是持久连接,如果客户端和服务器任意一端想中断连接就可以使用Connection: close,HTTP1.1以前的版本默认不是持久连接,因此如果想开启持久连接可以使用Connection: Keep-Alive。
  • Date:报文创建日期和时间。
  • MIME-Version:报文发送方遵循的MIME版本。
  • Trailer:如果报文采用分块传输编码(chunked transfer encoding),那么这个首部将会列出拖挂部分的首部集合(报文主体后面使用的首部集合)。
  • Transfer-Encoding:传输的报文采用的编码方式。
  • Update:发送方想要使用的升级版本或者协议。
  • Via:报文经过的中间节点(代理、网关等)。
  • Upgrade:用于检测http协议或者其他协议是否有可用的更高版本,其值也可以指定一个完全不同的协议名。

通用缓存首部

  • Cache-Control:传输缓存指令,用于实现缓存机制,大致上可以分为缓存请求指令和缓存响应指令两大类:

    • 缓存请求指令:
      1. no-store:不缓存客户端请求和服务器响应,即不进行缓存。
      2. no-cache:在发布缓存资源之前,必须向源端服务器进行验证。
      3. max-age:设置缓存有效时长,超过这个时长缓存将失效。
      4. min-fresh:客户端期望获取在指定时间保持最新状态的响应。
      5. max-stale:表明客户端愿意接受一个已经过期的资源,但是过期时间不能超过指定时长。
      6. no-transform:不能够对资源进行转换或者转变,代理不能够修改Content-type、Content-Rage和Content-Encoding等HTTP头。
      7. only-if-cached:客户端只接受已缓存的资源。
    • 缓存响应指令:

      1. no-store:不缓存客户端请求和服务器响应,即不进行缓存。
      2. no-cache:在发布缓存资源之前,必须向源端服务器进行验证。
      3. must-revalidate:在资源过期之后,未向服务器成功验证之前,不能够使用缓存进行响应。
      4. no-transform:不能够对资源进行转换或者转变,代理不能够修改Content-type、Content-Rage和Content-Encoding等HTTP头。
      5. public:允许任何对象缓存(代理服务器、客户端)响应,即使是通常不可缓存的内容(1. 没有max-age指令或者Expires消息头,2. post请求响应)。
      6. private:响应只允许单用户(比如用户浏览器)进行缓存,任何中间节点都不能缓存响应。
      7. max-age:设置缓存有效时长,超过这个时长缓存将失效。
      8. proxy-revalidate:和must-revalidate的效果一样,但是仅用于共享缓存(比如代理),私有缓存会被忽略。
      9. s-maxage:覆盖max-age和Expires首部,仅限用共享缓存,私有缓存会被忽略。

      💡ps:共享缓存和私有缓存的区别就是缓存的资源能否能提供给多个用户使用,私有缓存的资源只能给单用户使用。

  • Pragma:HTTP1.0规范中的首部,具体表现取决于实现,因此可能具有不一样的效果;除非是在只支持HTTP1.0版本的应用程序中才使用该首部,否则其他情况下都应该优先考虑Cache-Control首部;理论上该首部的效果和Cache-Control: no-cache的效果一样,但是因为具体表现得参考实现。

请求首部

​ 请求首部还可以分为以下几类:

1. 请求信息性首部。 2. 条件请求首部。 3. 安全请求首部。 4. 代理请求首部。

请求信息性首部

  • Client-IP:提供了客户端的IP地址。
  • From:提供了客户端用户的邮件地址。
  • Host:提供了接受请求的服务器主机名和端口号。
  • Referer:提供了包含当前请求的文档URI。
  • UA-Color:提供了客户端显示器颜色相关信息。
  • UA-CPU:提供了客户端CPU的类型或制造商。
  • UA-Disp:提供了客户端显示器能力的相关信息。
  • UA-OS:提供了运行在客户端的操作系统名称和版本。
  • UA-Pixels:提供了客户端显示器的像素信息。
  • User-Agent:将发起请求的应用程序告诉服务器。

💡ps:UA-*和Client-IP首部并不是规范中的内容,只是有客户端实现。


  • Accept:告诉服务器客户端可以接受(处理)的媒体类型,使用MIME类型表示。
  • Accept-Charset:告诉服务器客户端可以接受(处理)的字符集类型。
  • Accept-Encoding:告诉服务器客户端可以接受的内容编码方式。
  • Accept-Language:告诉服务器客户端可以接受哪些语言。
  • TE:告诉服务器可以使用哪些扩展传输编码。

条件请求首部

  • Expect:可以向服务器列出所期望的行为,HTTP1.1规范只列出了一个期望条件:100 Continue。
  • If-Match:如果实体标记与文档当前的实体标记一致,那么就获取此文档。
  • If-Modified-Since:如果在指定的日期时间(响应头Last-Modified)之后资源有被修改过,就重新获取这份资源,否则就使从缓存中取资源的副本。
  • If-None-Match:如果实体标记(Etag)与文档当前的实体标志不一致,就获取此文档。
  • If-Range:在一定条件下Range首部生效,值可以为etag或者时间。
  • If-Unmodified-Since:如果在指定的日期时间之后资源没有被修改过,就重新获取这份资源,否则就使从缓存中取资源的副本。
  • Range:如果服务器支持范围请求,则请求资源的指定的范围。

安全请求首部

  • Authorization:向服务器提供能够验证客户端身份的数据,由两部分组成 <type> <credetials>,type代表验证类型;credetials代表验证令牌。
  • Cookie:从客户端传送数据给服务端,通常情况下用于传输会话ID,传送给服务器的数据按理来说是来自于服务器上一次返回给客户端的。
  • Cookie2:用来说明请求端的cookie版本。

代理请求首部

  • Max-Farward:在将请求发送给源端服务器时,经过代理服务器和网关等中间节点的最大次数。
  • Proxy-Authorization:与Authorization首部的作用一样,只是这里是客户端提供给代理服务器的用于验证身份的凭证,通常是在服务器返回407状态码及Proxy-Authenticate的时候发送。
  • Proxy-Connection:与Connection首部的作用一样,只是这里是在与代理建立连接的时候使用。

响应首部

​ 响应首部也可以分为以下几类:

1. 响应信息性首部。 2. 协商首部。 3. 安全响应首部。

响应信息性首部

  • Age:表示响应已存在时间(从创建响应开始计算,单位秒)。
  • Public:表示服务器为该资源支持的请求方法列表。
  • Retry-After:如果资源不可用的话,应该在时间点之后再次进行尝试;通常用于503状态码服务器暂时维护或者升级的时候,用于告诉客户端服务大概多久会恢复。
  • Server:服务器应用程序名称和版本号。
  • Title:对HTML文档来说,就是HTML文档的源端给出的标题。
  • Warning:对报文当前状态可能存在问题进行说明,ps:《HTTP权威指南》说它只是一个响应首部,但是MDN说它是一个通用首部。

协商首部

  • Accept-Ranges:告诉客户端服务器支持范围请求,具体值说明的是范围请求使用的单位。
  • Vary:需要查看其他首部的列表,会影响之后的响应,之后的请求只有vary列出来的所有首部的值完全相同时才会使用缓存(MDN的例子似乎表明请求首部和响应首部对应),否则不会当作是同一个请求。

安全响应首部

  • Proxy-Authenticate:代理对客户端的质询,表示获取代理上资源需要采用的身份验证方式。
  • Set-Cookie:服务器向客户端设置cookie,通常情况下使用该首部来设置会话ID传送给客户端。
  • Set-Cookie2:与Set-Cookie首部的作用一样,但是目前已经被废弃。
  • www-Authenticate:服务器客户端的质询,表示获取服务器上的资源需要采用的身份验证方式。

实体首部

​ 实体首部可以细分为以下几类:

1. 实体信息性首部。 2. 内容首部。 3. 实体缓存首部。

实体信息性首部

  • Allow:列出了可以对此资源执行的请求方法列表。
  • Location:用于告诉客户端,资源的实际位于何处(URL)。

内容首部

  • Content-Base:解析主体中的相对URL时使用的基础URL。
  • Content-Encoding:对主体执行的编码方式。
  • Content-Language:解析主体时最适应使用的语言。
  • Content-Length:主体长度或者尺寸。
  • Content-Location:资源实际所在的位置。
  • Content-MD5:主体的md5校验和。
  • Content-Range:在整个资源中此实体表示的字节范围。
  • Content-Type:该主体的对象类型(MIME类型)。

实体缓存首部

  • Etag:实体特定版本的标志符,用于缓存的强校验。
  • Expires:该值指定日期时间之后资源失效,需要从新进行对资源进行验证。
  • Last-Modified:资源最后一次被修改的日期和时间。

参考资料

  • 《HTTP权威指南》
  • MDN