【发布时间】:2017-02-01 09:42:14
【问题描述】:
我正在使用 apache tomcat 服务器并有一个 Web 应用程序呈现几个 js、css 和图像文件。我想确保这些文件被浏览器缓存,这样就不会每次都请求它们。但是,我注意到有些文件正在被缓存,而另一些则没有。我发现应用程序的响应标头有 Expires :“Dec 31 1969 at 7:00 PM”。经过this 之后,我从成功删除标头的web.xml 中删除了tomcat 安全约束。我还将我的应用程序中的 Expires 标头配置为从现在起 1 周。这也不能确保页面被缓存。
在此之后,我将 Cache-Control 标头配置为 public,并将 max-age 设置为 1 周。这些变化都没有帮助我。此外,被缓存和未被缓存的页面具有以下相同的标题:
HTTP/1.1 200 OK
Cache-Control: max-age=604800, public
ETag: 240983
Last-Modified: Fri, 09 Sep 2016 18:49:42 GMT
Date: Wed, 01 Feb 2017 07:34:25 GMT
via: HTTP/1.1 ab-d-klt-tom1
Expires: Wed, 08 Feb 2017 07:35:29 GMT
Content-Type: application/x-javascript
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
X-FRAME-OPTIONS: SAMEORIGIN
X-Powered-By: Servlet/3.0
X-UA-Compatible: IE=edge
Server: Apache
除此之外,我还尝试了 here 中描述的 ExpiresFilter,但没有任何运气。
编辑:当我的应用程序部署在带有 Tomcat 且没有 SSL 的 Windows 环境中时,我的应用程序成功缓存了浏览器中的所有文件。
但是,当应用程序部署在具有 Tomcat 的 Linux 环境中时,SSL 不会缓存文件。 SSL会导致这种情况吗?
【问题讨论】:
-
您能否向我们展示一个未被浏览器缓存的资源请求的 HTTP 标头?
-
@LeonidVasilyev 我在上面编辑了我的帖子。 SSL 是否会导致此问题?
-
请求头如下: GET /html/en/default/***.css HTTP/1.1 Host: 10.62.137.70 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 Accept: text/css,/;q=0.1 Referrer: *** Accept-Encoding: gzip , 放气, sdch, br 接受语言: en-US,en;q=0.8 Cookie: _ga=GA1.1.794081272.1485321205; _gat=1; JSESSIONID=***
-
Chrome 是否显示有关您的 SSL 证书的任何错误?
-
是的,“https”和挂锁在 chrome 中有一个十字,并显示“您与此站点的连接不安全”。
标签: tomcat browser-cache tomcat8 http-caching