2017-09-13 151 views
2

我在观察,CSS文件没有在Chrome浏览器上缓存。我的应用程序是由角CLI和所有需要的缓存控制标头构建和Expires头设置为5分钟:Chrome没有缓存css文件。缓存适用于.js/.png文件。

被设定相同的响应头是否如预期般高速缓存
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. 资源呈现自签名的证书,并与HTTPS工作并不由Chrome缓存有时如果有任何SSL错误。但在我的情况下,所有其他文件,如.js,.png文件都在相同的频道上运行并被缓存。

  2. Transfer-Encoding: chunked在chrome上导致任何问题?它在FireFox中工作正常。

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

任何指针/建议吗?

回答

1

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

由于我无法控制服务器配置以设置任何HTTP协议设置,因此,我在 的最后设置了响应标头:Transfer-Encoding: identity。 使用此响应标头,http服务器不会进一步修改标头并将其放在Content-Length标头中。用Content-Length标题作为回应,给Chrome一个清晰的图片,可以缓存资源文件。

0

我在一个网站上有同样的问题,但部署相同的Web应用程序到另一个网站(在同一个IIS)服务器上,我得到一切缓存。 回收应用程序池并没有帮助。

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

+0

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