HTTP标头
HTTP 1.1的标头主要分为四种,通用标头 、实体标头 、请求标头 、响应标头, 现在我们来对这几种标头进行介绍
通用标头
HTTP通用标头之所以这样命名,是因为与其他三个类别不同,它们不是限定于特定种类的消息或者消息组件(请求,响应或消息实体)的。HTTP通用标头主要用于传达有关消息本身的信息,而不是它所携带的内容。它们提供一般信 息并控制如何处理和处理消息。尽管通用标头不会限定于是请求还是响应报文,但是某些通用标头大部分或全部用于-种特定类型的请求中。也就是说,如果某个通用标头出现在请求报文中,那么大部分通用标头都会显在该请求报文中。响应报文也是一样的。先列出来一个清单,讲明我们都需要介绍哪些通用标头。
如图:
Cache-Control
缓存(Cache) 是计算机领域里的一 个重要概念,是优化系统性能的利器。不仅计算机中的CPU为了提高指令执行效率从而选择使用寄存器作为辅助,计算机网络同样存在缓存,下面我们就介绍一下计算机网络中的缓存。
Cache-Control是通用标头的指令,它能够管理如何对HTTP的求或者响应使用缓存。
因为计算机网络中是可以有第三者出现的,也就是缓存服务器,这个指令通过影响请求/响应中的缓存服务器从而达到控制缓存的目的;不仅有缓存服务器,还有浏览器内部缓存也会影响链路的缓存。
这个标头中可以出现许多单独的指令,其详细信息可以在RFC 2616中找到,即使这是常规标头,某些指令也只能出现在请求或响应中。下表提供了一个Cache -Control选项的总结并告诉你如何去使用.
上面这个表格其实会有四种分类:
●
可缓存性:它们分别是no-cache、no- store、private和public
缓存有效性时间:它们分别是max-age 、S -maxage、maxstale 、min- fresh
重新验证并重新加载:它们分别是
must- revali date
和proxy- revalidate
●
其他:它们分别是only-if-cached 和no-transform
no-store
no-store才是真正意义上的不缓存,每次服 务器接受到客户端的请求后,都会返回最新的资源给客户端。
max-age
max-age可以用在请求或者响应中,当客户端发送带有max-age的指令时,缓存服务器会判断自己缓存时间的数值和max-age的大小,如果比max-age小,那么缓存有效,可以继续给客户端返回缓存的数据,如果比max-age大,那么缓存服务器将不能返回给客户端缓存的数据。
如果max-age = 0,那么缓存 服务器将会直接把请求转发到服务器。
must-revalidate
表示一-旦资源过期,缓存就必须在原始服务器上没有成功验证的情况下才使用其过期的数据。
Cache-Control: must- reval idate、no-store、no_ cache、
must-revalidate和max-age 可以一 起看,下面是一 个这四个标
头的流程图
public
public属性只出现在客户端响应中,表示响应可以被任何缓存所缓存。在计算机网络中,分为两种
缓存,共享缓存和私有缓存,如下所示
private
当指定private
指令后,响应只以特定的用户作为对象,这与public
的用法相反,缓存服务器只
对特定的客户端进行缓存,其他客户端发送过来的请求,缓存服务器则不会返回缓存。
s-maxage
S -maxage指令的功能和max-age指令的功能相同,不同点之处在于s-maxage不能用于私有缓存,只能用于多用户使用的公共服务器,对于同一用户的重复请求和响应来说,这个指令没有任何作用。
min-fresh
min- fresh只能出现在请求中,min-fresh要求缓存服务器返回min-fresh时间内的缓存数据。例如Cache- Control :min-fresh=60,这就要求缓存服务器发送60秒内的数据。
max-stable
max-stable只能出现在请求中,表示客户端会接受缓存数据,即使过期也照常接收。
only-if-cached
这个标头只能出现在请求中,使用only-if-cached 指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。
proxy-revalidate
proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。
no-transform
使用no- trans form指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。
Connection
HTTP协议使用TCP来管理连接方式,主要有两种连接方式,持久性连接和非持久性连接。
持久性连接
持久性连接指的是一次会话完成后,TCP连接并未关闭,第二次再次发送请求后,就不再需要建立
TCP连接,而是可以直接进行请求和响应。它的一般表示形式如下
从HTTP 1.1开始,默认使用持久性连接。
keep-alive也是一个通用标头,一般Connection都会和keep-alive -起使用,keep-alive 有两个参数,一个是timeout ;另一个是max,它们的主要表现形式如下
非持久性连接
非持久性连接表示一次会话请求/响应后关闭连接的方式。HTTP 1.1之前使用的连接都是非持久连接,也就是
Date
Date是一个通用标头,它可以出现在请求标头和响应标头中,它的基本表示如下
表示的是格林威治标准时间,这个时间要比北京时间慢八个小时
Pragma
Pragma是http 1.1之前版本的历史遗留字段,仅作为与http的向后兼容而定义。它的一-般形式如下
只用于客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。
如果所有的中间服务器都以实现HTTP /1.1为标准,那么直接使用Cache-Control: no-cache即可,如果不是的话,就要包含两个字段,如下
Trailer
首部字段Trailer 会事先说明在报文主体后记录了哪些首部字段。该首部字段可应用在HTTP/1.1版本分块传输编码时。一般用法如下
以上用例中,指定首部字段Trailer的值为Expires,在报文主体之后(分块长度0之后)出现了首部字段Expires。
Upgrade
首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
上图用例中, 首部字段Upgrade 指定的值为TLS/1.0 。请注意此处两个字段 首部字段的对应关系,Connection 的值被指定为Upgrade。Upgrade 首部字段产生作用的对象仅限于客户端和临近服务器之间。因此,使用首部字段Upgrade时,还需要额外指定Connection: Upgrade 。对于附有 首部字段Upgrade的请求,服务器可用101 Switching Protocols 状态码作为 响应返回。
Via
使用Via是为了跟踪客户端和服务器之间的请求/响应路径,避免请求循环以及能够识别请求/响应链中发送者协议的功能。Via 字段由代理服务器添加,不论是正向代理还是反向代理,并且可以出现在请求标头和响应标头中。它用于跟踪消息转发。例如下图所示
Via后面的的1.1, 1.0表示接收服务器.上的HTTP版本,Via首部是为了跟踪路径,经常和TRACE方法一 起使用。
Warning(注意: Warning 字段即将被弃用)
Warning通用HTTP标头通常会告知用户一些与缓存相关的问题的警告。
HTTP/1.1中定义了7种警告。它们分别如下
资料参考:《图解HTTP》