【问题标题】:Tomcat prevent static resource cachingTomcat防止静态资源缓存
【发布时间】:2010-09-16 16:56:23
【问题描述】:

我已经阅读了几个答案,但没有一个有效。我在我的应用程序的 META-INF/context.xml 中放置了一个 cachingAllowed。

我在 server.xml 和 context.xml 中放置了 cachingAllowed = 'false' 是徒劳的。我还删除了我的工作/[app] 缓存,这是我在资源恢复时看到的。

JSP - 看起来不错!

请求网址:/loadconf.jsp

请求方法:GET

状态码:200 OK

请求标头

接受:/

推荐人:http://localhost/

User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3

响应标头

Content-Type:application/javascript;charset=UTF-8

日期:2010 年 9 月 16 日星期四 16:52:35 GMT

服务器:Apache-Coyote/1.1

传输编码:分块

JS - 看起来很糟糕

请求网址:yuiloader-dom-event.js

请求方法:GET

状态码:200 OK

请求标头

接受:/

推荐人:http://localhost/

User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3

响应标头

接受范围:字节

Cache-Control:max-age=15552000 不好

内容长度:60327

内容类型:文本/javascript

日期:2010 年 9 月 16 日星期四 16:39:57 GMT

ETag:W/"60327-1273012296000" 不好

到期时间:2011 年 3 月 15 日星期二 16:39:57 GMT 不好

最后修改时间:格林威治标准时间 2010 年 5 月 4 日星期二 22:31:36

服务器:Apache-Coyote/1.1

【问题讨论】:

  • 我必须向您指出@BalusC 对此*.com/questions/2156077/… 的出色回答
  • 我需要为每个文件添加一个过滤器才能做到这一点......为什么Tomcat甚至假设这些文件应该被缓存,为什么它说它应该被缓存xxx长。没有指定这些参数。

标签: tomcat caching


【解决方案1】:

简单的方法,使用 Apache,如下所示:

# Configure Tomcat proxys
<VirtualHost localhost:80>

  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/

  #for files that have no header
  ExpiresDefault now
  ExpiresByType text/javascript now

  #overwrite the headers tomcat is foolishly trying to provide
  Header set Cache-Control "max-age=0, must-revalidate"
  Header set Expires "January 1, 1970" #this should be "now", but it wasn't working for me

</VirtualHost>

我的静态文件现在返回 200 个响应。

【讨论】: