我们有一个应用程序,允许用户添加/编辑/替换/删除内容(文本,图像,swfs,mp3等)。我们希望管理员通过使用no-cache标头始终拥有最新的更新文件,当用户运行应用程序时,所有内容都会获取/使用缓存。
我已经研究过解决方案,并尝试使用html元标记,如:
<meta http-equiv="expires" content="0" />
<meta http-equiv="cache-control" content="no-cache, no-store" />
<meta http-equiv="pragma" content="no-cache" />
但这似乎不是一个好的解决方案,因为这是在创建标题后发生的,并且不会更改媒体(图像,swfs,mp3等)标题。
我想使用apache来设置标头,并且遇到this site的代码:
<filesMatch "\.(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
这似乎是一个很好的解决方案,但是当我们需要缓存它和不应该缓存它之间唯一真正的区别是URL(preview.jsp vs run.jsp),所以我们无法匹配它按文件类型,因为大多数文件都是相同的。
有没有人能为这种情况找到一个好的解决方案?
感谢。
编辑:
Preview.jsp和run.jsp基本上只有不同的jsp和js处理相同。他们通过iframe阅读相同的内容和媒体。例如,它们看起来像:
<%
//Some JSP
%>
/* HTML Headers, JS, ETC */
<iframe id="contentFrame" seamless="1" src="http://somedomain.com/template.html"></iframe>
/* End HTML */
preview.jsp和run.jsp出现在同一目录中并使用所有相同的资源。我正在寻找一个解决方案,让preview.jsp不缓存任何东西,run.jsp缓存东西。
使用Apache Tomcat设置服务器。
答案 0 :(得分:1)
您可以在Java servlet中设置相应的标头。 Apache mod_headers主要用于Apache管理的静态资源。虽然应用程序服务器提供的所有内容都在AS端进行管理。
通常,您可以使用过滤器来实现此目的。以下是一个示例:http://www.tidytutorials.com/2009/11/adding-headers-to-requests-in-filters.html
答案 1 :(得分:1)
# Image, CSS and JavaScript requests normally contain the Referer header
# which tells apache which page is requesting the resource
# Use SetEnvIf directive to set a flag for internal uses
SetEnvIf Referer preview\.jsp force_no_cache
# Header directive optionally accepts env= argument
# If present, the directive is fired if the flag is set
Header unset ETag env=force_no_cache
# repeat for other headers