为什么我的 ETag 标头在 IIS 下有效,而在 VS2010 Web 服务器下无效?

Dyl*_*tie 0 asp.net-mvc etag cassini webdev.webserver http-headers

在我的 ASP.NET MVC 2 应用程序中,我有以下几行:

Response.Cache.SetMaxAge(TimeSpan.FromDays(90));
Response.Cache.SetETag(lastWriteTime.Value.Ticks.ToString());
Run Code Online (Sandbox Code Playgroud)

使用 Fiddler 跟踪 HTTP 流,我可以看到:

ETag: 634473035667000000
Run Code Online (Sandbox Code Playgroud)

在 IIS7 下运行时,在响应标头中,但是当我在 Visual Studio 2010 Web 服务器下运行时,这个标头只是......消失了。无论我是通过 Response.Cache.SetETag() 还是通过 Response.AppendHeader("ETag", etag) 设置它,它都不会返回。

这是 IIS Web 服务器的“功能”吗?是否有一些我错过的配置设置?如果我必须附加到 IIS 进程才能调试任何东西,这将使测试缓存失效有点繁琐......

编辑:看起来,尽管调用了 Response.Cache.SetCacheability(HttpCacheability.Public),VS/Cassini 总是返回 HTTP Cache-Control 设置为“私有”的资源......这有帮助吗?

Ped*_*dro 5

如果您使用 ETag 将被抑制HttpCacheability.Private

您可以找到有关HttpCacheability.Private 为什么抑制 ETags 的更多信息

如果你把它改成HttpCacheability.ServerAndPrivate它应该可以工作