我正在启用 Sitecore 的 ASP.NET 站点中启用输出缓存,方法是将其置于默认值.aspx(位于 CMS 外部(:
<%@ OutputCache Duration="300" VaryByParam="None" %>
在我的 Web.config 中:
<setting name="DisableBrowserCaching" value="false" />
当我直接点击我的页面时,这有效,如 http://[网站]/默认.aspx,但当我浏览到根站点 http://[网站]/时则不行。 在这种情况下,它始终返回 200 响应,而不是重复请求时返回 304(未修改(。
我在不使用 Sitecore 的网站中尝试过相同的方法,缓存在 IIS 7 和 Sitecore 6.4.1 下的所有实例中都有效。
如何在启用了 Sitecore 的网站中为默认(无扩展名(ASP.NET 页面启用输出缓存?
更新:
似乎在我的本地计算机上工作(此问题在我们的 QA 环境中(,我可以看到的唯一区别是我使用的是 IIS 7.5 而不是 7.0,但使用相同的 web.config 和 Sitecore 实例。
此外,我还创建了另一个测试页面(http://[网站]/Test/default.aspx(,它表现出相同的行为,因此受影响的不仅仅是根。
更新 2:
坏消息 - Sitecore 已确认输出缓存不受官方支持:
"Sitecore CMS 并非设计用于在 IIS 中启用的用户模式或内核模式输出缓存,并且不支持其使用。">
这并不能解释为什么它有时适用于特定的 URL 和环境,我仍然希望有解决方法。
我做了快速测试,看起来将禁用浏览器缓存设置为 false 并将 OutputCache 指令添加到 aspx 布局文件工作正常。
是的,响应代码是 200 OK,但页面取自浏览器的缓存(而不是来自服务器(。响应代码 304 表示有人调用服务器,服务器应答说没有更改任何内容。
你能仔细检查页面的代码是否在服务器端执行吗?
如果使用 sitecore,则需要将指令放入每个布局 (.aspx( 文件中,以便演示文稿设置始终是这些布局之一。
<%@ OutputCache Duration="300" VaryByParam="None" %>
如果您的主页使用不同的布局减去指令,它可能会解释行为。
除此之外,在内置缓存方法中使用 Sitecore 可能会更好。
在 web.config 中的公共网站上启用缓存:
<Sites>
<site name="website" cacheHtml="true" ... />
通常,输出缓存在组件级别工作,并在演示文稿的 Sitecore 中进行配置。