我在浏览器缓存方面有点挣扎。
我有一个静态 HTML 页面(我们称之为 index.html),其中包含具有魔力的 javascript(嵌入交互式服务)。这些脚本具有 AJAX 响应错误处理程序,如下所示:
function(response){ // response is prototype.js AJAX response
document.open("text/html");
document.write(response.responseText);
document.close();
}
当它被调用并替换文档内容时,浏览器缓存(我不希望它被缓存)并且点击 F5 什么都不做。办公室。CTRL+F5 工作正常,但我不能假设用户会这样做。
这个函数是我得到的错误 AJAX 响应的处理程序。它用于将页面内容替换为由前端 Apache HTTP 服务器响应的自定义错误页面,该服务器对另一个 Apache HTTP 服务器具有反向代理,该服务器再次具有对 Tomcat 服务脚本和处理来自它们的请求的反向代理。
前端 Apache HTTP 服务器在其配置错误页面覆盖和缓存控制标头 index.html:
ProxyErrorOverride On
<Files index.html>
Header set Cache-control "no-cache, no-store, max-age=0, must-revalidate"
Header set Pragma "no-cache"
ExpiresByType text/html "access plus 1 second"
</Files>
所以 index.html 的缓存对我来说似乎被关闭了。我假设您看到我正在使用 mod_proxy、mod_headers、mod_expires。
错误页面配备了用于缓存控制的元标记(我知道,我知道它们不能被考虑在内;)并且可以说它的标题看起来像这样:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate, max-age=0" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Thu, 01 Jan 1970 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
所以最后我的场景看起来或多或少是这样的:
- 页面加载
- 加载并调用javascripts,魔术开始(服务嵌入指定的div,并开始使用AJAX与服务器对话)。
- Tomcat/Inner HTTP 服务器已关闭(我不知道软件的维护/升级)
- 脚本获取 AJAX 错误响应(其中 responseText 是自定义错误页面,被前端 Apache HTTP 服务器及其错误页面覆盖)
- 页面内容被自定义错误页面替换
- 服务器从 4. 起来(或者甚至没有,那么它将从不同的级别处理)
- 用户点击 F5 页面被重新加载(但它没有)
我在这里可能有点混乱,所以如果有不清楚的地方或者我应该提供更多细节,请询问我会尽快提供更多信息。
PS:我认为我的方法或做一些愚蠢的事情可能从根本上是错误的。如果我这样做,请告诉我。
编辑:
实际上它发生在 ff(16.0.2, 17.0) 和 IE9 上。Chrome、Opera 和 Safari 只需重新加载页面而无需缓存。哦,更糟糕的是ff,即只有在地址栏中按Enter键时才按ctrl + f5刷新:P
在 ff 我在 documentURI 属性中得到 wycywig:///