Cache-Control:no-cache是缓存但立即失效,然后去cdn对比etag。如果etag没过期则返回304使用本地缓存,过期则返回202使用新上线内容。
现在的场景:去cdn对比etag,但网络不通,这时也使用本地缓存而不是报网络错误,应该怎么实现?前端有这样的配置吗? 应该怎么配置?
Cache-Control:no-cache是缓存但立即失效,然后去cdn对比etag。如果etag没过期则返回304使用本地缓存,过期则返回202使用新上线内容。
现在的场景:去cdn对比etag,但网络不通,这时也使用本地缓存而不是报网络错误,应该怎么实现?前端有这样的配置吗? 应该怎么配置?
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
cache-control:no-cache 表示不缓存,直接请求服务器(你的cdn)下载文件。
etag 是一个类似文件 content hash sum,当浏览器第一次下载文件的时候,服务器将文件的etag发送给浏览器,浏览器保存下来。当下一次访问这个文件时,浏览器发送请求并携带 etag 信息到服务器。服务器检查etag是否和目标文件一致,如果一致,浏览器就使用缓存副本,否则,下载新文件。
如果想使用缓存,要先清楚你期望的缓存策略。一般可以将前端资源分为两类,html 和 其他,对于html,设置 no-cache 和 etag,从而在保证html最新的前提下充分利用缓存。
其他资源,如 css/js/image 等等,使用gulp/webpack 等构建工具在文件命中加入内容的hash,并设置尽可能长的 max-age(一般设置一年)。