ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
<div id="div5"><h3> 5, HTTP缓存控制(强缓存、弱缓存);缓存相关的HTTP请求头 <h3></div> [参考文章](https://zhuanlan.zhihu.com/p/23299600) **优先级: 强制缓存 > 协商缓存; cache-control > Expires > Etag > Last-modified** 第一次请求肯定是没有缓存,服务器除了返回body主体数据之外,还返回一个header头部信息,其中包括了缓存的信息 - ==时效缓存(强制缓存)==:不会向服务器发送请求,直接从缓存中读取资源 **设置强缓存** * 1,expires 低版本浏览器 (http/1.0,时间格式GMT) * 2,**Cache-Control** (http/1.1,单位 秒) max-age(表示缓存内容在 xx秒后消失) no-cache(要根据协商缓存是否需要缓存客户端) no-store(所有内容都不会被缓存) public(所有内容都将被缓存包括客户端和代理服务器) private(所有内容只有客户端可以缓存) s-maxage(只用于共享缓存和max-age效果一样,只是max-age 用于普通缓存) - ==非时效缓存(对比缓存,用的是标识)协商缓存== 第一次请求的时候,返回给客户端数据和缓存的信息,也就是一个特定的缓存标识,客户端把这个缓存标识放到缓存数据库。 再次请求时 客户端先把缓存标识也一起发给服务端,进行对比。客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。 **两种缓存标识** Etag (唯一标识)优先级更高 Last-Modified/If-Modified-Since 返回给客户端最后这个资源的修改时间,优先级没有Etag * 1,ETag和If-None-Match + Etag是上一次加载资源时,服务器返回的。它的作用是唯一用来标示资源是否有变化。 + 浏览器下次请求时将ETag值传入If-None-Match中,服务端匹配传入的值与上次是否一致,如果一致返回304否则返回新资源和新的ETag,如果不一致,状态码200,服务端返回body和header * 2, Last-Modified和 If-Modified-Since + Last-Modifeds是服务器返回资源同时在header添加的,表示这个资源在服务器上最后修改时间,浏览器接受后缓存文件和header。 + 浏览器下次请求时,检测是否有Last-Modified字段,如果存在则在请求头添加 If-modified-Since该字段值就是上次服务器返回的值 如果没有变化则返回304直接从缓存中读取,否则返回新资源