HTTP缓存

为了方便理解,我们假设浏览器服务器之间存在一个缓存数据库

缓存 大体 分为 强制缓存对比缓存两类

强制缓存

强制缓存是在缓存已存在且未失效的情况下直接去缓存数据库获取数据

如何判断缓存失效

  • Response Header 中的expires字段

第一次请求数据的时候,服务器在返回缓存规则时会在header中标实过期 时间expires,在下一次请求时,请求时间小于服务端返回的到期时间,直接使用 缓存数据。

  • Response Header 中的 Cache-Control字段

现在Http1.1默认使用Cache-Control 字段,因为客户端浏览器和服务端的时间 可能存在偏差,这就会导致缓存的误差。

private: 客户端可以缓存

public: 客户端和代理服务器都可缓存

max-age=xxx: 缓存的内容将在 xxx 秒后失效

no-cache: 需要使用对比缓存来验证缓存数据

no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发

对比缓存

对比缓存在缓存已存在的情况下,先去缓存数据库获取数据标实,然后去服务器验证标实 是否已经失效,没失效则去缓存数据库获取数据,失效则服务器会直接获取新数据缓存规则,然后浏览器 在将新的数据缓存至缓存数据库

服务端在进行标识比较后,只返回header部分,通过状态码302通知客户端使用缓存, 不再需要将报文主体部分返回给客户端。

  • Last-Modified(第一次) / If-Modified-Since

     根据资源最后的修改时间 TODO
  • Etag (第一次) / If-None-Match

     根据资源标实 比 Last-Modified优先级高 TODO

总体流程

参考 https://www.cnblogs.com/chenqf/p/6386163.html

Last updated