如何避免浏览器对已缓存CSS文件发起请求
解决CSS资源仍发送304请求的问题
你的问题核心是:已经给style.css设置了Cache-Control: public, max-age=31536000, immutable,但浏览器还是会发送条件请求并得到304响应,想要彻底消除这个请求,直接用本地缓存。
为什么会出现304请求?
虽然immutable标记的作用是告诉浏览器:在max-age有效期内,这个资源不会改变,直接用本地缓存就行,别去服务器验证。但如果你的服务器同时给style.css返回了Last-Modified或ETag响应头,部分浏览器(或者在某些场景下)还是会带着对应的If-Modified-Since/If-None-Match头去服务器做验证,这就导致了304请求的出现。
彻底消除请求的解决方案
你需要做两件事来实现完全本地缓存:
保留现有的
Cache-Control配置
这个配置本身是正确的,public允许CDN等中间缓存,max-age=31536000设置一年的缓存有效期,immutable标记资源不可变:Cache-Control: public, max-age=31536000, immutable移除
style.css响应中的Last-Modified和ETag头
这两个头是浏览器用来做条件验证的依据,删掉它们之后,浏览器没有了验证资源是否更新的方式,再加上immutable的提示,就会在max-age有效期内完全跳过网络请求,直接从本地缓存读取style.css。
额外注意事项
- 测试场景要正确:别用强制刷新(Ctrl+F5)测试,强制刷新会忽略所有缓存策略,浏览器会重新请求所有资源。应该测试普通的页面打开方式,比如输入URL回车、点击书签或者从其他页面跳转过来。
- 兼容旧浏览器(可选):如果需要兼容非常旧的、不支持
immutable的浏览器,可以给style.css的URL添加版本哈希(比如style.css?v=abc123)。当资源真正需要更新时,修改哈希值就能强制浏览器重新获取新资源,而旧版本的资源可以一直被缓存。
内容的提问来源于stack exchange,提问作者Roman Alexeev
相关产品推荐
相关产品推荐

