http协议属于应用层,用于客户端和服务端之间的通信,通过请求和响应的交换达成通信。它是不保存状态的协议,即无状态协议,每当有新的请求发送时,都会有新的响应产生。
1.通用首部字段
1)cache-Control 操作缓存的工作机制
cache-Control的指令用于请求和响应略有不同。
缓存请求指令:
指令 | 参数 | 说明 |
---|---|---|
no-cache | 无 | 强制向源服务器再次验证 |
no-store | 无 | 不缓存请求或响应的任何内容 |
max-age=[秒] | 必须 | 响应的最大age值 |
s-maxage=[秒] | 必须 | 同max-age,但使用的服务器不同 |
min-fresh=[秒] | 必须 | 返回在这个时间内还未过期的资源 |
max-stale=[秒] | 可省略 | 返回还在这个时间内的资源,即使已经过期 |
only-if-cached | 无 | 从缓存获取医院 |
- no-cache 目的是为了防止从缓冲中返回过期的资源。即如果客户端的请求中有这个指令,那么缓冲服务器就不能将缓冲的资源返回给客户端,而是转发客户端的请求给源服务器,从源服务器中请求资源。
- no-store 使用该指令时,暗示请求和响应中包含有机密信息。因此,该指令规定缓存不能在本地缓存请求或者响应任一部分
- max-age 判定缓存资源的缓存时间数值比指定的时间小,那么客户端就会接受缓存的资源。如果等于0,那么缓存服务器通常需要将请求转发给源服务器
cache-Control:max-age=1024(单位:秒)
- s-maxage 功能和max-age指令相同,但是该指令适用于供多位用户使用的公共缓存服务器(代理)。
- min-fresh 要求缓存服务器返回至少还未过指定时间的缓存资源
cache-Control:min-fresh=1024(单位:秒)
当指定min-fresh为1024秒之后,在这1024秒之内,如果有超过有效期限的资源都无法作为相响应返回
- max-stale 可指示缓存资源即使过期也照常接受。
cache-Control:max-stale=3600(单位:秒)
当指定max-stale的数值后,如果资源的有效期已过,但是还在max-stale的时间范围内,那么客户端依旧会接收缓存资源
如果未指定数值,那么无论过多久,客户端都会接收响应。
- only-if-cached 客户端仅在缓存服务器本地缓存目标资源的情况下才要求其返回,即缓存服务器不重新加载响应,也不会确认资源的有效性。若发生请求缓存服务器的本地缓存无响应,则返回504状态码。
- must-revalidate 代理会向源服务器再次验证即将返回的响应缓存目前是否有效。
- proxy-revalidate 要求所有的缓存服务器在接收到带有该指令的客户端请求返回响应之前,必须在再次验证资源的有效性。
- no-transfrom 无论在请求还是响应中,缓存都不能改变实体主体的媒体类型。可防止缓存或代理压缩图片等操作
缓存响应指令:(仅列出与请求不同的部分,相同的不再说明)
指令 | 参数 | 说明 |
---|---|---|
public | 无 | 可向任意用户提供响应缓存 |
private | 可省略 | 仅对特定用户返回响应 |
no-cache | 可省略 | |
no-store | 无 | |
no-stransform | 无 | 代理不可更改媒体类型 |
must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
max-age | ||
s-maxage |
- public 明确表示其他用户也可以利用缓存
- private 缓存服务器只会对该特定的用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器不会返回缓存
- no-cache 缓存服务器不能对资源进行缓存。源服务器以后也将不会对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作
- max-age 当服务器返回的响应中包含max-age指令时,缓存服务器将不对资源的有效性再做确认