根据雅虎针对高性能网站的最佳做法,我想从我的标题中删除Etags(我手动管理所有缓存,不需要Etags ......以及何时/如果我需要扩展到农场,我真的很喜欢他们走了).我在Windows Server 2008上运行IIS7.任何人都知道我该怎么做?
在IIS7下,Etag更改编号(以下Etag的部分)始终设置为0.
因此,服务器上的Etag不再因服务器而异,因此雅虎的最佳实践不再适用.
由于你无法在IIS7上实际上压制ETag标头,所以最好不要使用它.到目前为止,我发现最有用的配置规则是"如果默认不破坏某些东西,请不要理会".
您可能会认为在web.config中执行此操作可以在IIS7中禁用ETag.但是嗅探器跟踪证实了ETag无论如何都被发送了.
使用空白也不起作用.无论如何ETag都被送了下来.
将ETag设置为其他站点建议的空白引号不起作用.
导致更多 ETag被发送:
ETag: "8ee1ce1acf18ca1:0",""
总而言之,我无法尝试或想到的任何东西都可以杀死IIS7上的ETag,至少不需要编写自定义模块等.
我写了一个自定义的http模块来处理这个问题.它真的没那么糟糕.这是代码:
using System; using System.Web; namespace StrongNamespace.HttpModules { public class CustomHeaderModule : IHttpModule { public void Init(HttpApplication application) { application.PostReleaseRequestState += new EventHandler(application_PostReleaseRequestState); } public void Dispose() { } void application_PostReleaseRequestState(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("ETag"); } } }
这是您想要的web.config更改:
我意识到这是一个老问题,但我在寻找解决方案时遇到了它.我想我找到了一个合理的答案,我发布了这个问题.
我们遇到了这个问题,甚至在IIS 7中设置一个空白的自定义ETag标头也不适用于所有文件(例如图像文件).我们最终创建了一个显式删除ETag标头的HttpModule.
更新:感谢用户@ChrisBarr添加了URL重写模块的要求
在iis 6中很容易,您可以为'ETag'=""添加自定义标题
在IIS 7中,在阅读此线程并确定不使用自定义http模块后无法实现之后,我发现您只需安装Microsoft的URL Rewrite模块并添加出站重写规则,如下所示:
这实际上有效,您不需要自定义http模块(dll).解锁system.webServer配置部分和设置customHeaders等不起作用 - 至少在我尝试过的所有情况下都是如此.一个简单的出站重写规则.