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

Chrome not caching css file. The caching works for .js/.png files.

我观察到 CSS 文件没有在 Chrome 浏览器上缓存。我的应用程序由 Angular-CLI 构建,所有必需的 cache-control headers 和 Expires header 设置为 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

设置为相同响应 header 的 JS 文件按预期进行缓存。 css 文件也缓存在 Firefox Mozilla 中。 我搜索了这些帖子,很少有帖子建议是:

  1. 如果存在任何 SSL 错误,Chrome 有时不会缓存提供 self-signed 证书和使用 HTTPS 的资源。但就我而言,所有其他文件,如 .js、.png 文件都在同一通道上运行并被缓存。

  2. Transfer-Encoding: chunked 是否导致 chrome 上的缓存出现问题?不过它在 FireFox 中运行良好。

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

任何pointers/suggestions?

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

只有在停止和启动 IIS 后,两个网站现在才在 Chrome 中缓存 CSS 和 JS 文件。打不过我,但你可以试一试。

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

由于我无法控制服务器配置来设置任何 HTTP 协议设置,我 最终设置响应 header:Transfer-Encoding: identity。 对于此响应 header,http 服务器不会进一步修改 header,并且也会添加 Content-Length header。通过 Content-Length header 响应,Chrome 清楚地表明资源文件可以被缓存。

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