Chrome没有缓存css文件。缓存适用于.js / .png文件。

时间:2017-09-13 07:14:46

标签: css google-chrome http-caching

我观察到CSS文件未在Chrome浏览器上缓存。我的应用程序由Angular-CLI构建,所有必需的缓存控制头和Expires头设置为5分钟:

Accept-Ranges:bytes
Cache-Control:max-age=600
Content-Encoding:gzip
Content-Type:text/css
Date:Wed, 13 Sep 2017 05:11:17 GMT
ETag:W/"441246-1505278984000"
Expires:Wed, 13 Sep 2017 05:21:18 GMT
Last-Modified:Wed, 13 Sep 2017 05:03:04 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Vary:Accept-Encoding

使用相同的响应头设置的JS文件按预期缓存。 css文件也在Firefox Mozilla中缓存。 我搜索了帖子和几篇帖子的建议是:

  1. 有时,如果存在任何SSL错误,Chrome会自动缓存呈现自签名证书和使用HTTPS的资源。但在我的情况下,所有其他文件,如.js,.png文件都在同一个频道上运行并被缓存。

  2. Transfer-Encoding: chunked导致Chrome上的缓存出现问题?它在FireFox中工作正常。

  3. gzip压缩功能不适用于Chrome:https://github.com/expressjs/compression/issues/64

  4. 任何指针/建议?

3 个答案:

答案 0 :(得分:1)

如果资源文件有Transfer-Encoding:chunked响应标头,Chrome似乎不会缓存它。即使资源文件的大小很小,也会设置此响应标头。我认为标头是根据http服务器配置自动设置的。此配置可以基于文件的大小等。

由于我无法控制服务器配置以设置任何HTTP协议设置,因此我 最终设置了响应头:Transfer-Encoding: identity。 使用此响应标头,http服务器不会进一步修改标头并放置Content-Length标头。通过响应Content-Length标题,Chrome可以清楚地了解资源文件是否可以缓存。

答案 1 :(得分:0)

我在一个网站上遇到同样的问题,但是将同一个网络应用程序部署到另一个网站(在同一个IIS上),我得到了所有缓存的内容。 回收应用程序池没有帮助。

只有在停止并启动IIS后,两个网站才会在Chrome中缓存CSS和JS文件。打败了我,但你可以尝试一下。

答案 2 :(得分:0)

不知道这是否是您的情况,但是,我遇到了同样的问题,当我开始对域使用正确的SSL证书时,问题消失了。