HTTP缓存
页面第一次加载时,会将资源进行缓存,在过期之前再次请求该资源,则会直接使用缓存,而不会重新发送请求,这样有利于节省资源和加快速度。
http 缓存分为强缓存和协商缓存。
强缓存
在缓存资源过期之前再次请求,则会使用强缓存。
强缓存通过
expires
和cache-control
控制资源过期时间,cache-control
的优先级高于expires
。cache-control
接收的值有- max-age: value 设置过期时间,表示多少 s 后过期
- s-maxage: value 代理服务器的缓存时间
- no-store 不使用缓存
- no-cache 缓存,但是每次都要向服务器验证
- private 响应只能被客户端缓存
- public 响应可以被任意缓存
协商缓存
当超过过期时间之后再请求缓存资源时,则会向服务器协商,客户端将缓存标识传给服务器,服务器拿着资源标识去匹配,如果资源没有更新,则返回 304 状态码并重新设置过期时间,客户端会读取本地缓存;如果不匹配,则表示资源有更新,服务器将新数据和新的资源标识一起返回给客户端。
发送需要发送资源标识和最后修改时间,但是服务器发给客户端的和客户端发给服务器都要这两个字段,因此共有这四个字段,两两出现。
- etag 资源唯一标识
- last-modified 最后修改时间
- if-None-Match 客户端缓存资源标识
- if-Modified-Since 客户端发送给服务器的资源最后修改时间
CDN缓存服务器
可以通过
cache-control
请求头字段控制资源是否可以被缓存服务器缓存,以及缓存的时间。- private: 只允许客户端缓存
- public: 允许被任意缓存区缓存
- no-store: 不缓存
- s-maxage:缓存服务器缓存时间