1. 缓存相关的字段(response)
expires:缓存过期时间
private:客户端可以缓存
public:客户端和代理服务器都可以缓存
max-age=xxx:缓存的内容将在xxx秒后失效
no-cache:需要使用对比缓存来验证缓存数据
no-store:所有内容都不好缓存,强制缓存和对比缓存都不会触发
last-modified:内容上次被修改的时间
Etag:文件的特殊标识
2. 缓存的类型
强制缓存的优先级高于协商缓存,顺序是cache-control>expires> ETag > Last-Modified
1)强制缓存
包括expires和cache-control。
- expires是服务器给的时间,当浏览器时间超过它后会重新发起请求。而浏览器时间可以更改,cache会出现很久不过期或者马上过期的情况
- cache-control是相对缓存时间开始往后多久到期 不会受当前时间影响
- 协商缓存
包括 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
访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。