You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免浏览器对已缓存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请求的出现。

彻底消除请求的解决方案

你需要做两件事来实现完全本地缓存:

  1. 保留现有的Cache-Control配置
    这个配置本身是正确的,public允许CDN等中间缓存,max-age=31536000设置一年的缓存有效期,immutable标记资源不可变:

    Cache-Control: public, max-age=31536000, immutable
    
  2. 移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:34