HTTP缓存
tags: 计算机网络 Created time: July 17, 2022 9:55 AM emoji: 🌐
页面第一次加载时,会将资源进行缓存,在过期之前再次请求该资源,则会直接使用缓存,而不会重新发送请求,这样有利于节省资源和加快速度。
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:缓存服务器缓存时间