为什么我的ETag标头在IIS下工作但不在VS2010网络服务器下工作?

时间:2011-07-26 19:18:10

标签: asp.net-mvc http-headers cassini etag webdev.webserver

在我的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”...这有帮助吗?

2 个答案:

答案 0 :(得分:4)

简单 - 它的卡西尼号。

Cassini并不是一个生产服务器,但它是为了方便调试(这也是为什么它也会覆盖缓存 - 毕竟如果你重新编译并重新运行,你会希望你的新代码没有被触及,因为页面是缓存?)

如果你希望你的调试能像在IIS中一样工作,那么IISExpress就是你应该去的地方......那里没有附着问题,因为它会启动一个真实的IIS实例,但是在你自己的用户环境中。

答案 1 :(得分:4)

如果您使用HttpCacheability.Private,则会禁止使用ETag。

您可以在Why does HttpCacheability.Private suppress ETags?

上找到更多信息

如果您将其更改为HttpCacheability.ServerAndPrivate,则应该