浏览器的几种缓存

1. 缓存相关的字段(response)

expires:缓存过期时间
private:客户端可以缓存
public:客户端和代理服务器都可以缓存
max-age=xxx:缓存的内容将在xxx秒后失效
no-cache:需要使用对比缓存来验证缓存数据
no-store:所有内容都不好缓存,强制缓存和对比缓存都不会触发
last-modified:内容上次被修改的时间
Etag:文件的特殊标识
浏览器的几种缓存_第1张图片

2. 缓存的类型

强制缓存的优先级高于协商缓存,顺序是cache-control>expires> ETag > Last-Modified

1)强制缓存
包括expires和cache-control。

  • expires是服务器给的时间,当浏览器时间超过它后会重新发起请求。而浏览器时间可以更改,cache会出现很久不过期或者马上过期的情况
  • cache-control是相对缓存时间开始往后多久到期 不会受当前时间影响
  1. 协商缓存
    包括 last-modified和Etag
  • last-modified会与客户端的if-modify-since字段进行比较,如果相等,返回304,否则返回200
  • etag和if-none-match字段匹配,如果相等,返回304,否则返回200

3. 三级缓存原理

  • 先去内存看,如果有,直接加载
  • 如果内存没有,择取硬盘获取,如果有直接加载
  • 如果硬盘也没有,那么就进行网络请求
  • 加载到的资源缓存到硬盘和内存,下次请求可以快速从内存中获取到

200 from memory cache
不访问服务器,直接读缓存,从内存中读取缓存。此时的数据时缓存到内存中的,当关闭进程后,也就是浏览器关闭以后,数据将不存在。但是这种方式只能缓存派生资源。
200 from disk cache
不访问服务器,直接读缓存,从磁盘中读取缓存,当关闭进程时,数据还是存在。这种方式也只能缓存派生资源
304 Not Modified
访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。

原文出处链接:https://juejin.im/post/5e0ef37a6fb9a047f51772fc

你可能感兴趣的:(http网络机制,缓存,http)