在我的ASP.NET MVC 2应用程序中,我有以下几行:
Response.Cache.SetMaxAge(TimeSpan.FromDays(90));
Response.Cache.SetETag(lastWriteTime.Value.Ticks.ToString());
使用Fiddler跟踪HTTP流,我可以看到:
ETag: 634473035667000000
在IIS7下运行时,在响应标头中,但是当我在Visual Studio 2010 Web服务器下运行时,此标题只是...消失了。无论我是通过Response.Cache.SetETag()还是通过Response.AppendHeader(“ETag”,etag)设置它,它都永远不会被返回。
这是IIS网络服务器的“功能”吗?我错过了一些配置设置吗?如果我必须附加到IIS进程以便能够调试任何东西,它将使测试缓存失效有点繁琐......
编辑:尽管调用了Response.Cache.SetCacheability(HttpCacheability.Public),但VS / Cassini似乎总是返回资源,并将HTTP Cache-Control设置为“private”...这有帮助吗?
答案 0 :(得分:4)
简单 - 它的卡西尼号。
Cassini并不是一个生产服务器,但它是为了方便调试(这也是为什么它也会覆盖缓存 - 毕竟如果你重新编译并重新运行,你会希望你的新代码没有被触及,因为页面是缓存?)
如果你希望你的调试能像在IIS中一样工作,那么IISExpress就是你应该去的地方......那里没有附着问题,因为它会启动一个真实的IIS实例,但是在你自己的用户环境中。
答案 1 :(得分:4)
如果您使用HttpCacheability.Private
,则会禁止使用ETag。
您可以在Why does HttpCacheability.Private suppress ETags?
上找到更多信息如果您将其更改为HttpCacheability.ServerAndPrivate
,则应该