HTTP缓存

tags: 计算机网络 Created time: July 17, 2022 9:55 AM emoji: 🌐

页面第一次加载时,会将资源进行缓存,在过期之前再次请求该资源,则会直接使用缓存,而不会重新发送请求,这样有利于节省资源和加快速度。

http 缓存分为强缓存和协商缓存。

强缓存

在缓存资源过期之前再次请求,则会使用强缓存。

强缓存通过expirescache-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:缓存服务器缓存时间