缓存 Cache-Control
zKing 2018-11-19 HTTP
主要是服务器对Cache-Control的配置
# 可缓存性
# public
所有内容都被缓存
# private
仅客户端缓存,代理服务器不缓存
# no-cache
必须先与代理服务器确认是否更改,然后在在决定使用缓存还是请求
# 到期
# max-age=< seconds >
设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。
# s-maxage=< seconds >
覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略
# max-stale=< seconds >
表明客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过时时间。
# 重新验证
# must-revalidate
缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。
# proxy-revalidate
与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。
# 其他
# no-store
缓存不应存储有关客户端请求或服务器响应的任何内容
# no-transform
不得对资源进行转换或转变。
HTTP条件方法可以实现高效的再验证,向服务发送 “ 条件GET ”,目前最常用的为
# If-Modified-Since:Date
表示在指定日期之后资源被更新,就返回新的请求,如果指定日期未更新就返回304直接读取缓存
# If-None-Math:ETag(实体标签,版本标识)
- 有的文档有可能周期性的被重写,通过ETag 来确保文档是否改变,改变返回请求状态为200的新资源,未改变返回状态码304直接读取缓存
- 在使用这个验证的前提下,除了设置
cache-control
,还需要设置last-modified
和etag
# 附加
- 除了用 Cache-Control 来设置缓存,也可以使用 Expires
- Expires设置的是日期,而且是根据本地时间判断的,若是用户的本地时间有误,就会有bug,所以现在都用Cache-Control,若两个都设置了会优先使用Cache-Control,因为这是新版的