首页 > 解决方案 > IE - XSL 文件没有从浏览器缓存中加载(总是点击服务器加载)

问题描述

在我们的应用程序中,我们有一些页面正在使用 activex 对象 Microsoft.XMLDOM 进行 xsl 转换。它是一个遗留应用程序,因此没有太大的更改空间。

Example:
<script>
var doc = new ActiveXObject("Microsoft.XMLDOM");
doc.async = false;
doc.load("/<<Some Path/myXSL.xsl");
document.write(myXML.transformNode(doc));
</script>

我们的 HTTP 服务器正在向客户端发送正确的缓存控制、到期属性。我们可以看到 CSS、JS、图像文件等是从浏览器缓存中提取的(状态 304),但对于 XSL 文件,它总是会访问服务器(状态 200)。

如果我们打开 Temporary Internet Files,我们可以看到虽然 Expires 列中存在未来日期,但 Last Checked 总是针对每个请求进行更新。

任何帮助在这里,将不胜感激。

标签: xslt-1.0internet-explorer-11browser-cachehttp-status-code-304

解决方案


在谷歌中搜索了很多之后,我们了解到 ActiveX Microsoft.XMLDOM 在请求头中发送“pragma - nocache”(跳过浏览器缓存)。

为了解决这个问题,我们需要将 ForcedResync 属性设置为 false(告诉 XML Dom 对象不要发送那个 pragma)。

例子:

<script>
var doc = new ActiveXObject("Microsoft.XMLDOM");
doc.async = false;
doc.setProperty("ForcedResync", false); 
doc.load("/<<Some Path>>/myXSL.xsl");
document.write(myXML.transformNode(doc));
</script>

推荐阅读