cache-control字段的理解

Cache-Control字段是http报文中的通用首部字段,既存在于请求报文中,也存在于响应报文中。部分字段值是共有的,但是具体的处理也会有差异。

一、共有字段值

共有字段值 请求报文中的作用 响应报文中的作用
no-cache 客户端提醒缓存服务器,在使用缓存前,不管缓存资源是否过期了,都必须进行校验 缓存服务器在缓存资源前,必须进行校验,判断是否有效
no-store 暗示请求报文中可能含有机密信息,不可缓存 暗示响应报文中可能含有机密信息,不可缓存
max-age=[秒] 如果缓存资源的缓存时间值小于指定的时间值,则客户端接收缓存资源(如果值为0,缓存服务器通常需要将请求转发给源服务器进行响应,不使用缓存) 在指定时间内,缓存服务器不再对资源的有效性进行确认,可以使用
no-transform 禁止代理改变实体主体的媒体类型(例如禁止代理压缩图片等)
cache-extension 新指令标记(token),如果缓存服务器不能理解,则忽略

二、请求报文私有字段值

字段值 作用
max-stale(=[秒]) 提示缓存服务器,即使资源过期也接收;或者过期后的指定时间内,客户端也会接收
min-fresh=[秒] 提示缓存服务器,如果资源在指定时间内还没过期,则返回
only-if-cached 如果缓存服务器有缓存该资源,则返回,不需要确认有效性。否则返回504网关超时

三、响应报文私有字段值

字段值 作用
public 明确指明其他用户也可以使用缓存资源
private 缓存服务器只给指定的用户返回缓存资源,对于其他用户不返回缓存资源
must-revalidate 缓存资源未过期,则返回,否则代理要向源服务器再次验证即将返回的响应缓存是否有效,如果连接不到源服务器,则返回504网关超时
proxy-revalidate 所有缓存服务器在客户端请求返回响应之前,再次向源服务器验证缓存有效性
s-maxage=[秒] 缓存资源的缓存时间小于指定时间,则可以返回缓存资源,只适用于公共缓存服务器

四、请求报文中的No-cache,no-store,max-age=0的区别

no-cache:不判断缓存资源是否过期,直接将请求发送给源服务器

no-store:不缓存

max-age=0:先要验证ETag/last-modified,判断资源是否有修改(有修改则返回新响应200,没有的修改则返回304)

五、响应报文中的Must-revalidate和proxy-revalidate的区别

前者使用范围主体更广,后者不应用于用户代理的本地缓存,应用在缓存服务器上

猜你喜欢

转载自blog.csdn.net/zhongshanxian/article/details/81289034