IIS7.5 OutputCacheModule 内核缓存 'public' 忽略 URL

标签 iis iis-7.5 outputcache cache-control

在 IIS 7.5 上的 ASP.NET 4 应用程序中有一些关于输出缓存的奇怪行为。我已经能够简单地在其他空设置上重复这个问题,我确定这是一个错误,但不确定如何向 Microsoft 报告它。

IIS 中的站点响应超过 1 个域,.NET 应用程序检查主机名,并相应地生成内容。例如,它可能会在空白页中打印请求 URL 的名称。例如,www.first-domain.com 和 www.second-domain.com

web.config 在 system.webServer 节点下将适当的缓存、urlCompression 和 httpCompression 全部关闭。

aspx 页面将缓存控制 header 设置为 public,带有 future 的过期日期或 max-age 值。

访问www.first-domain.com输出成功写入'www.first-domain.com'的页面。

但是,访问 www.second-domain.com 会输出一个写着“www.first-domain.com”的页面。

检查失败的请求跟踪,System.Web.Caching.OutputCacheModule 已找到缓存的输出(即使 .config 文件已关闭该功能),缓存已匹配,即使请求 URL 主机名不同,因此,在第二个域的正确页面出现之前,只要设置了最长期限/到期时间,第二个请求就会将第一个请求的结果输出到不同的域。

要么将缓存控制设置为私有(private),要么在 web.config 中删除“OutputCache”模块解决问题,同时保持发送到浏览器的正确缓存控制 header ,但显然,我无法利用在我需要时进行内核缓存。

我找不到任何关于如何配置 OutputCacheModule 的 MSDN 文档。

有没有其他人遇到过这个问题,我怎样才能启用内核缓存并让它考虑 URL 主机名(而不将应用程序分离到 IIS 中的不同站点)。

谢谢。

更新:

添加 SetSlidingExpiration 没有效果,因为无论请求主机名如何,内核缓存仍然缓存输出。现在唯一的方案是要么禁用输出缓存,要么在它将运行的每个域上运行应用程序的重复实例 - 考虑到服务器性能的下降,这将导致使用输出缓存获得的性能增加,我们决定禁用此应用的输出缓存。

最佳答案

9个月后没有给出答案,也没有找到解决方案,只有一个workaround,也许这个会在IIS 7.5以上的下一个版本中修复...

--

添加 SetSlidingExpiration 没有效果,因为无论请求主机名如何,内核缓存仍然缓存输出。现在唯一的方案是要么禁用输出缓存,要么在它将运行的每个域上运行应用程序的重复实例 - 考虑到服务器性能的下降,这将导致使用输出缓存获得的性能增加,我们决定禁用此应用的输出缓存。

关于IIS7.5 OutputCacheModule 内核缓存 'public' 忽略 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4642652/

相关文章:

ssl - 相互证书身份验证失败并出现错误 403.16

security - 我可以在 IIS 中配置 SMTP,以便中继到远程 SMTP 服务器吗?

web-services - 访问 Web 服务时出现 Http 502 Bad Gateway 错误

azure - signalR 性能计数器 + azure VM+ 完整的 IIS + windows server 2012

asp.net - WCF - 发现该契约(Contract)的多个端点配置 - 错误

c# - 当我在输出缓存中使用它或缓存错误时,VaryByCustom 是否不起作用?

asp.net - 在 JavaScript 代码中嵌入常量服务器端标签的最佳方法是什么?

iis - 在默认网站上添加应用程序错误(IIS 7.5、Windows server 2008R2)

c# - ApiController 的输出缓存(MVC4 Web API)

c# - 根据在数据库中找到的日期修改输出缓存