您的位置:首页 > 理论基础 > 计算机网络

HTTP通用首部字段类型详解

2016-10-20 00:00 369 查看
1,Cache-Control字段

通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。指令的参数是可选的,多个指令之间通过逗号“,”分隔。该指令可用于请求及响应时。

可用的指令按请求和响应两种分类如下:

缓存请求指令





缓存响应指令



可用的指令中具体分析如下:

(1)表示是否能缓存的指令

Cache-Control:public

当指定使用public指令时,则明确表明其他用户也可利用缓存。

Cache-Control:private

当指定使用private指令时,响应只以特定的用户作为对象,这与public正好相反。

Cache-Control:no-cache

使用no-cache指令的目的是为了防止从缓存中返回过期的资源。如果客户端发送的请求中包含,则表示客户端将不会接收缓存过的响应。缓存服务器必须把客户端请求转发給源服务器。如果服务器返回的响应中包含,那么缓存服务器不能对资源进行缓存,源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。

Cache-Control:no-cache=Location

由服务器返回的响应中,如果报文首部字段Cache-Control中对no-cache字段名具体指定了参数值,那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。

(2)控制可执行缓存的对象的指令

Cache-Control:no-store

请求(和对应的响应)或响应中包含机密信息,因此该指令规定缓存不能在本地存储请求或响应的任一部分。

(3)指定缓存期限和认证的指令

Cache-Control:s-maxage=604800(单位:秒)

s-maxage指令的功能和max-age指令相同,不同点在于s-maxage指令只适用于供多位用户使用的公共缓存服务器,即对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。

Cache-Control:max-age=604800(单位:秒)

当客户端发送的请求包含max-age指令时,如果判断缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。当max-age值为0,那么缓存服务器通常需要将请求转发給源服务器。

当客户端发送的请求包含max-age指令时,缓存服务器将不对资源的有效性再做确认,而max-age数值代表资源保存为缓存的最长时间。

Cache-Control:min-fresh=60(单位:秒)

min-fresh指令要求缓存服务器返回至少还未过指定时间的缓存资源。这里即表示为60秒后资源无法作为响应返回了。

Cache-Control:max-stale=3600(单位:秒)

使用max-stale可指示缓存资源,即使过期页照样接收。如果指令未指定参数值,那无论经过多久,客户端都会接收响应;如果指定了具体数值,那么即使过期,只要仍处于max-stale指定时间内,仍旧会被客户端接收。

Cache-Control:only-if-cached

使用该指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则会返回状态码504 Gateway Timeout。

Cache-Control:must-revalidate

使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。若代理无法连通源服务器再次获取有效资源的话,缓存必须給客户端一条504状态码。

使用must-revalidate指令会忽略请求的max-stale指令。即使在首部使用了max-stale,也不会再有效果。

Cache-Control:proxy-revalidate

proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。

Cache-Control:no-transform

使用no-transform指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。这样可以防止缓存或代理压缩图片等类似操作。

(4)Cache-Control扩展

Cache-Control:private,community=“UCI”

通过cache-extension标记(token),可以扩展Cache-Control首部字段内的指令。

2,Connection字段

Connection首部字段具备两个作用,一是控制不再转发給代理的首部字段,二是管理持久连接。

控制不再转发給代理的首部字段

Connection:不再转发的首部字段名

在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发給代理的首部字段(即Hop-by-hop首部)。



管理持久连接

Connection:Close

HTTP/1.1版本的默认连接都有持久连接。为此客户端会在持久连接上连续发送请求。当服务器端想明确断开连接时,则指定Connection首部字段的值为Close。



HTTP/1.1之前的HTTP版本的默认连接都是非持久连接。为此,如果想在旧版本的HTTP协议上维持持续连接,则需要指定Connection首部字段为Keep-Alive。

Connection:Keep-Alive



3,Date字段

首部Date字段表示创建HTTP报文的日期和时间。

4,Pragma字段

Pragma字段是HTTP/1.1之前版本的遗留字段,仅作为HTTP/1.0的向后兼容而定义。该首部字段属于通用首部字段,但只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。

以HTTP/1.1为标准,所有中间服务器可直接采用Cache-Control:no-cache指定缓存的处理方式。但是要整体掌握全部中间服务器使用的HTTP协议版本不太显示,因此在请求报文中会同时采用两个首部字段。具体如下:

Cache-Control:no-cache

Prama:no-cache

5,Trailer字段

首部字段Trailer会事先说明在报文主体后记录了哪些首部字段。该首部字段应用在HTTP/1.1版本分块传输编码时。



6,Transfer-Encoding字段

该字段规定了传输报文主体时采用的编码方式。

7,Upgrade字段

该字段用于检测HTTP协议以及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。



首部字段Upgrade指定为TLS/1.0,要注意此处两个首部字段的对应关系,如图可知,此时Connection设置为Upgrade。Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。因此,实用首部字段Upgrade时,要将Connection设置为Upgrade。

8,Via字段

使用首部字段Via是为了追踪客户端和服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生,所以必须在经过代理时附加该首部字段内容。



如图中Via字段数据,其中1.0为接收请求的服务器上应用的HTTP协议版本。Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用。

9,Warning字段

HTTP/1.1的Warning首部是从HTTP/1.0的响应首部Retry-After演变过来的。该首部通常会告知用户一些与缓存相关的问题的警告。HTTP/1.1中定义了七种警告,且警告码具备扩展性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HTTP