HTTP的强制缓存和协商缓存

757 阅读2分钟

缓存的优缺点:

优点

  1. 节省流量宽带
  2. 降低服务器的要求,避免服务器过载
  3. 提高浏览器加载速度 缺点
  4. 消耗客户端内存

强制缓存

请求数据时是去缓存数据库查找,有则取出数据,没有则向服务器请求。

强制缓存

(图片来自:juejin.cn/post/684490… ) 强缓存会用到请求头里的Expires和Cache-Control两个字段来表示

Expires

Expires的值为数据到期时间,当请求时间小于Expires值的时候则使用缓存数据。

Cache-control

是用来区分对缓存机制的支持情况,通过Cache-control的值来提供不同的缓存策略。 no-store:所有内容都不缓存 no-cache:需要验证缓存的数据 private:客户端可以缓存 public:服务端和客户端都可以缓存 max-age=t:缓存内容将在t秒后失效

协商缓存

客户端会从缓存数据库获取标识,得到标识后去服务器验证是否失效,如未失效会返回304,客户端去缓存数据库获取数据

协商缓存

Last-Modified

last-Modified:服务器会返回资源最后修改时间 if-Modified-Since: 浏览器再次请求时会,会携带上最后修改时间。服务端接收到请求发现有请求头有if-Modified-Since会与资源的最后修改时间进行对比。如果一致则返回304,浏览器去缓存数据库获取资源。不一致返回请求的资源 if-Unmodified0Since:从某个时间开始,资源有没有被修改。没有修改返回200,修改过返回412

Etag

Etag:服务器返回时通过这个字段返回随机生成的唯一标识 If-None-Match:浏览器再次请求时会带上次字段,值为服务器生成的唯一标识(Etag),服务器接收到请求发现有If-None-Match会进行对比 • 不同:说明资源被修改过,返回新的资源状态200 • 相同:资源没有被修改过,返回304,浏览器去缓存数据库获取数据