我们有一个应用程序,允许用户添加/编辑/替换/删除内容(文本,图像,swfs,mp3等)。我们希望管理员使用无缓存标头始终拥有最新的更新文件,并且当用户运行该应用程序时,所有内容都会获取/使用缓存。
我研究了解决方案,并尝试使用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设置标题,并遇到了以下代码:
<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与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设置服务器。
的组合SetEnvIf以及Header可能做的伎俩:
SetEnvIf
Header
# 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