HTTP协议07-通用首部字段

通用首部字段

通用首部字段是指,请求报文和响应报文双方都会使用的首部。

 

1)Cache-Control

通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。

指令的参数可以多选,多个指令之间使用","分割。

Cache-Control:private,max-age=0,no-cache

1.1 缓存请求指令

指令 参数 说明
no-cache 强制向源服务器再次验证
no-store 不缓存请求或响应任何内容
max-age=[秒] 必须 响应的最大Age值
max-stale(=[秒]) 可省略 接受已过期的响应
min-fresh=[秒] 必需 期望在制定时间内的响应仍有效
no-transform 代理不可更改媒体类型
only-fi-cached 无  从缓存获取资源
cacheextension - 新指令标记(token)

 

 

 

 

 

 

 

 

 

 

 

 

1.2 缓存响应指令

指令 参数 说明
public 可想任意方提供响应的缓存
private 可省略 仅向特定用户返回响应
no-cache 可省略 缓存前必须先确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行确认
proxy-revaildate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=[秒] 必需 响应的最大Age值
s-maxage=[秒] 必需 公共缓存服务器响应的最大Age值
cache-extension - 新指令标记(token)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3 表示是否能缓存的指令

public指令

Cache-Control:public

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

private指令

Cache-Control:private

当指定private指令后,响应只以特定的用户作为对象。

缓存服务器会对该特定用户提供资源缓存服务,对于其他用户发送过来的请求,代理服务器不会反悔缓存。

no-cache指令

Cache-Control:no-cache

使用no-cache指令的目的是为了防止从缓存中返回过期的资源。

客户端发送的请求中包含no-cache指令,则表示客户端不接收缓存过的响应。中间的缓存服务器必须把客户端的请求转发给服务器。

如果服务器返回的响应中带有no-cache指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求提出的资源有效性进行确认,且禁止对其响应资源进行缓存操作。

Cache-Control:no-cache=Location

由服务器返回的响应中,若报文首部字段Cache-Control中对no-cache这个字段中指定参数值。那么客户端在接收到这个被指定参数值的手部字段对应的响应报文后,就不能使用缓存。

换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数

(个人理解,响应中有no-cache字段,缓存服务器就不能缓存。如果该字段有值,则客户端不能进行缓存。无值。则客户端可以缓存。)

 

1.4 no-store指令

Cache-Control:no-store

当使用no-store指令时,表示请求或响应中包含机密信息,规定不能本地缓存请求或响应。

 

1.5 指定缓存期限和认证的指令

max-age指令

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

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

当服务器返回的响应中包含max-age指令时,缓存服务器讲不对资源的有效性进行确认,而max-age值代表资源最长可缓存时间。

s-maxage指令

Cache-Control:s-maxage604800(单位:秒)

s-maxage指令和max-age指令相同,不同是s-maxage指定一般是给代理服务器的。也就是说给同一用户重复返回响应的服务器来说,这个指令没有用。

当使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理

min-fiesh指令

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

min-fiesh指令要求缓存服务器返回至少还未过指定时间的缓存资源。

max-stale指令

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

使用max-stale指令,可使缓存即使过期也可被接收

如果指令没有参数,那么无论经过多久,客户端都会接收响应;如果有参数,即使过期了,只要扔处于max-stale指定的市价年内,仍旧会被客户端接受。

only-fi-cache指令

Cache-Control:only-if-cached

表示在缓存服务器存在相应资源的缓存情况下,并返回缓存。如果没有则返回504状态码

must-revalidate指令

Cache-Control:must-revalidate

使用must-revalidate指令,代理回向源服务器再次验证即将返回的响应缓存是否仍有效。

若代理无法联通源服务器再次获取有效资源的话,返回504状态码

使用must-revalidate指令会忽略请求的max-stale指令

proxy-revalidate指令

Cache-Control:proxy-revalidate

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

no-transform指令

Cache-Control:no-transform

使用no-transform指令规定无论在请求还是响应中,缓存都不能更改实体的媒体类型。

防止缓存或代理压缩图片等操作

 

2)Connection

具体如下两个作用

2.1 控制不在转发给代理的首部字段

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

在请求或响应中,代理会删除相应首部字段后再转发(既用来控制Hop-by-hop首部字段)

2.2 管理持久连接

Connection:Close

HTTP/1.1是默认保持持久连接,当服务器端想要断开持久连接,需要在首部指定Connection首部字段值为close

Connection:Keep-Alive

HTTP/1.1版本之前是默认非持久连接,如果想在旧版本上保持持久连接,需要指定Connection首部字段值为Keep-Alive

 

3)Date

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

Date:Wed, 06 Mar 2019 16:03:03 GMT

 

4)Pragma

HTTP/1.1之前版本的历史遗留字段,为了HTTP/1.0向后兼容而定义。

Pragma:no-cache

只用在客户端发送的请求中,要求所有中间服务器不返回缓存的资源

如果所有的中间服务器都是以HTTP/1.1版本为基准,那直接采用Cache-Control:no-cache即可。但是这不现实。所以一般的请求的会同时含有以下字段。

Cache-Control:no-cache
Pragma:no-cache

 

5)Trailer

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

 

6)Transfer-Encoding

规定了报文的编码方式,仅对分块传输编码有效。

Transfer-Encoding:chunked

 

7)Upgrade

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

客户端请求

GET /index.htm HTTP/1.1
Upgrade:TLS/1.0
Connection:Upgrade

服务器响应

HTTP/1.1 101 Switching Protocols
Upgrade:TLS/1.0,HTTP/1.1
Connection:Upgrade

Upgrade字段只限于客户端和相邻服务器之间起作用,所以要用Connection首部字段

对于有Upgrade首部字段的请求,服务器可返回101 Switching Protocols 状态码

 

8)Via

追踪客户端与服务器端之间请求和响应报文的传输路径。还可避免请求回环的产生。

 

9)Warning

告知用户一些与缓存相关的警告。

Warning首部的格式如下。日期时间部分可省略

Warning:[警告码][警告的主机:端口号]"[警告内容]"([日期时间])

HTTP/1.1定义了7种警告,警告码具备拓展性。

警告码 警告内容 说明
110 Response is stale(响应已过期) 代理返回已过期的资源
111 Revalidation failed(再验证失败) 代理再验证资源有效性时失败(服务器无法到达等原因)
112 Disconnection operation(断开连接操作) 代理与互联网连接被故意切断
113 Heuristic expiration(试探性过期) 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下)
199 Miscellaneous Warning(杂项警告) 任意的警告内容
214 Transformation applied(使用了转换) 代理对内容编码或媒体类型等执行了某些处理
299 Miscellaneous persistent warning(持久杂项警告) 任意的警告内容
posted @ 2019-03-07 00:39  梦忆安凉  阅读(344)  评论(0编辑  收藏  举报