缓存只用于单个用户,存储位置位于用户的浏览器
缓存可以被多个用户使用,储存位置位于 ISP 或者或所在地区(如公司)架设的 web 代理,这样,通过这个 web 代理访问网络的用户可以共享代理服务器上的缓存
一般 HTTP 缓存都是针对 GET 请求,对于其他请求缓存并没有什么大作用
cache-control
头pragma
头不存储客户端请求与服务端响应的内容
cache-control: no-store
cache-control: no-cache, no-store, must-revalidate
no-cache
请求相关,强制将请求交给原始服务器
no-store
缓存存储相关,不缓存must-revalidate
验证相关,必须验证缓存状态,过期的抛弃cache-control: private
//
cache-control: public
public
响应可以被任何中间人(中间代理,CDN)进行缓存private
中间人不能缓存响应,响应只能在浏览器中进行缓存cache-control: max-age=31536000
max-age=<seconds>
单位为秒max-age
的计算方式为距离请求发起的时间秒数,通常会用于图片,css, js 资源还有另外一个
Expires
, 它是用来指定缓存过期的某个时间点
现在应该都不用了,用的话是用来兼容基于 HTTP/1.0 的客户端
当资源被缓存后,一般情况下是永久存储在缓存中,但由于缓存空间有限,因此会定期清理缓存,这个过程为缓存驱逐
驱逐过程
If-None-Match
头,请求发送到服务器,让服务器判断缓存资源是否还新鲜(缓存还可不可以继续使用)下面序号具有优先级
cache-control: max-age=N
中的 N 来判断Expires
属性,比较 Expires
值与头部中 Date
属性Last-Modified
属性,通过规范文档中的公式计算得出过期时间ETag
If-None-Match
头进行验证Last-Modified
If-Modified-Since
头进行验证当客户端发起缓存校验后