Chrome不缓存CSS文件。对于.js/.png文件,缓存是有效的。

7

我注意到Chrome浏览器没有缓存CSS文件。我的应用程序由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文件被预期地缓存。在Firefox Mozilla中,css文件也被缓存了。 我搜索了一些帖子,几篇帖子提出了以下建议:
  1. 有时,在存在任何SSL错误的情况下,使用自签名证书并使用HTTPS的资源在Chrome中不会被缓存。但在我的情况下,所有其他文件(如.js、.png文件)都在同一信道上运行,并被缓存。
  2. Transfer-Encoding: chunked是否会导致Chrome缓存方面的任何问题?虽然FireFox中可以正常工作。
  3. gzip压缩与Chrome不兼容:https://github.com/expressjs/compression/issues/64
有任何提示/建议吗?
3个回答

4
看起来Chrome不会缓存资源文件,如果它具有“Transfer-Encoding:chunked”响应头。即使资源文件很小,也会设置此响应头。我认为这个头部是根据http服务器配置自动设置的。此配置可能基于文件大小等。
由于我无法控制服务器配置以设置任何HTTP协议设置,因此我最终设置了响应头:“Transfer-Encoding:identity”。使用此响应头,http服务器不会进一步修改标头,并且也会放置“Content-Length”标头。使用响应中的“Content-Length”标头,可以让Chrome清楚地知道可以缓存资源文件。

0

不确定这是否适用于您的情况,但我曾经遇到同样的问题,当我开始为该域使用正确的SSL证书时,问题就消失了。


0

我在一个网站上遇到了同样的问题,但是将相同的Web应用程序部署到另一个Web站点(在同一台IIS服务器上)时,我得到了所有缓存。

重启应用程序池没有帮助。

只有在停止和启动IIS之后,两个网站现在都可以在Chrome中缓存CSS和JS文件。我不知道为什么,但你可以试试。


是的,你可能是正确的。这与HTTP服务器的配置有关。在我的情况下,我没有自由/访问服务器配置,因此我为JS文件设置了响应头“Transfer-Encoding:identity”。 - Nilesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接