HTTP 缓存机制

135 阅读1分钟

1、浏览器的缓存

浏览器的缓存包含很多内容: HTTP 缓存indexDBcookielocalstorage等。这里我们只讨论 HTTP 缓存相关内容。浏览器缓存分为强缓存协商缓存

2、强缓存

强缓存是利用 http 的返回头中的 ExpressCache-Control 两个字段来控制的,用来表示资源的缓存时间。

Express

Express 是缓存过期时间,用来指定资源到期时间,是服务器的具体时间点。也就是说,Express=max-age+请求时间,需要和 Last-modefied 结合使用。 ExpressWeb 服务器响应消息头字段,在响应 http 请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

Cache-Control

Cache-Control 是一个相对时间,例如 Cache-Control:3600,代表着资源的有效期是 3600 秒,由于是相对时间,并且都是与客户端时间比较,所以服务器与客户端时间偏差也不会导致问题。

Cache-ControlExpress 可以在服务端配置同时启用或者启用任意一个,同时启用的时候, Cache-Control的优先级更高

3、协商缓存

304 在第一次请求的时候,返回状态码 200,和响应头中返回 Cache-Control,控制缓存使用的时间/方式(私有缓存和共有缓存),在第二次发请求的时候,先查看 max-age,如果过期了,在请求头设置 If-None-Match 等于刚刚 Etag 的值,去后台对比,如果 Etag值相同,证明后端没有更新,所以返回 304 状态,前端提取本地的缓存继续使用,就是所谓 协商缓存