当前位置:  开发笔记 > 后端 > 正文

如何从IIS7中删除eTag标头?

如何解决《如何从IIS7中删除eTag标头?》经验,为你挑选了6个好方法。

根据雅虎针对高性能网站的最佳做法,我想从我的标题中删除Etags(我手动管理所有缓存,不需要Etags ......以及何时/如果我需要扩展到农场,我真的很喜欢他们走了).我在Windows Server 2008上运行IIS7.任何人都知道我该怎么做?



1> AnthonyWJone..:

在IIS7下,Etag更改编号(以下Etag的部分)始终设置为0.

因此,服务器上的Etag不再因服务器而异,因此雅虎的最佳实践不再适用.

由于你无法在IIS7上实际上压制ETag标头,所以最好不要使用它.到目前为止,我发现最有用的配置规则是"如果默认不破坏某些东西,请不要理会".


我很想以不同的理由杀死etags:除非我误解了事情,否则我会在*单一服务器上看到IIS*无偿更改etags的*first*组件(即所谓的"Filetimestamp")尽管我的文件没有被修改.例如,文件的最新版本将在浏览器中,浏览器将发送'If-None-Match:"01cc3a8acccc1:0"'/'If-Modified-Since:Fri,06 Jan 2012 00:32: 24 GMT',IIS将以'ETag:'b6baeea8acccc1:0"'/'Last-Modified:Fri,06 Jan 2012 00:32:24 GMT'回应.这些是带有foo.js?rev = xxx等URL的js文件,每次传递相同的xxx.

2> Jeff Atwood..:

您可能会认为在web.config中执行此操作可以在IIS7中禁用ETag.但是嗅探器跟踪证实了ETag无论如何都被发送了.


    
        
    

使用空白也不起作用.无论如何ETag都被送了下来.


    
        
    

将ETag设置为其他站点建议的空白引号不起作用.


    
        
    

导致更多 ETag被发送:

ETag: "8ee1ce1acf18ca1:0",""

总而言之,我无法尝试或想到的任何东西都可以杀死IIS7上的ETag,至少不需要编写自定义模块等.


我没有证实这个杰夫,但这可能是因为httpProtocol部分被锁定在网站级别.当我试图通过web.config文件以编程方式设置iis7*compression*级别时,我发现了这种情况.我不得不最终解锁*根服务器级别上的那个部分.也许这一节有同样的问题?(我真的希望通过GUI提供所有IIS设置)

3> Dan..:

我写了一个自定义的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更改:


    
        
            
                
            
        
        
            
        
    



4> Nathan Fox..:

我意识到这是一个老问题,但我在寻找解决方案时遇到了它.我想我找到了一个合理的答案,我发布了这个问题.



5> jwanagel..:

我们遇到了这个问题,甚至在IIS 7中设置一个空白的自定义ETag标头也不适用于所有文件(例如图像文件).我们最终创建了一个显式删除ETag标头的HttpModule.



6> AndrewPK..:

更新:感谢用户@ChrisBarr添加了URL重写模块的要求

在iis 6中很容易,您可以为'ETag'=""添加自定义标题

在IIS 7中,在阅读此线程并确定不使用自定义http模块后无法实现之后,我发现您只需安装Microsoft的URL Rewrite模块并添加出站重写规则,如下所示:


  
    
    
  

这实际上有效,您不需要自定义http模块(dll).解锁system.webServer配置部分和设置customHeaders等不起作用 - 至少在我尝试过的所有情况下都是如此.一个简单的出站重写规则.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有