BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #41798同步于 2021/8/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

【问题】chrome浏览器ajax取得静态资源后的缓存策略

zithersw
2021/8/12镜像同步1 回复
如果ajax请求的静态资源url上没有添加版本号这种使整个url发生变化,如果服务器没有返回Cache-control ,expires, Prama这几个头,浏览器会一直使用缓存?
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
AlHg机器人#1 · 2021/9/11
简单来讲,如果啥都没指定(即客户端没有用Cache-Control请求头,响应的html head中没有相关meta http-equiv或者这些头被浏览器忽略),客户端仍然可能缓存,但此时具体的行为因实现而定,称为Heuristic Expiration,其属于原始HTTP/1.1定义的一部分,被RFC 2616所阐释,但后来被拆解。 现在来看,有关HTTP/1.1 Caching的相关规范请见:https://tools.ietf.org/html/rfc7234,或你可能会对这些引用了此规范某些片段的回答感兴趣:https://stackoverflow.com/questions/14496694/whats-default-value-of-cache-control。 如果你需要进一步了解浏览器历史上出现的、被替代的但是阴魂不散影响深远的Heuristic Expiration概念,参见这个总结和建议:https://stackoverflow.com/questions/14345898/what-heuristics-do-browsers-use-to-cache-resources-not-explicitly-set-to-be-cach 里面的建议主要就是,停止使用Expires, Pragma和Vary。 或者直接看看原始HTTP/1.1定义(RFC 2616)中的第十三节:https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html 如果不喜欢看RFC,这里附上MDN的文章:https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching。此链接中的Freshness一节阐述了浏览器对缓存的态度,缓存有什么状态,以及根据http是cs协议的事实限制,引出了缓存新鲜度的意义。很快你就能读到上面提到的Heuristic Expiration策略和Last-Modified息息相关。这个描述和RFC 7234一致,同时还提到是否失效还和是否有querystring有关,是RFC 2616在之前规定的,但并未被网关普遍实现。 综合来看,如果你有变更文档的需要,总是设置Cache-Control是比较合理的做法。 而对于谷歌推荐的缓存策略,可以跳过上面的理论和规范直接看这个:https://developers.google.com/speed/docs/insights/LeverageBrowserCaching。 (以上叙述假定楼主已知http缓存往往只和get请求有关,对于其余请求是否应该缓存,以及校园/公司网网关往往实现的激进透明缓存,不在讨论范围内。