IIS 7.5从响应中删除etag标头

时间:2011-10-30 19:57:29

标签: iis caching http-headers iis-7.5 etag

我知道这个问题已被问过很多次,但大多数是在2009-2010。

我非常肯定我正在努力删除它们的项目,但是目前我找不到任何方法将它们删除。

这个领域有没有进步?微软让IIS无法轻松配置这些标题似乎很疯狂。

目前已尝试过:

  • 将空白的etag标题添加到web.config
  • 将带引号的etag添加到web.config
  • 直接通过IIS添加空白etag标题
  • 添加自定义模块,删除BeginResponse上的etag
  • 与上述相同,但适用于EndResponse
  • 与上述两者相同,但不是删除etag,而是将其设为空

我听说有一个ISAPI过滤器可以删除它们,但是我无法在任何地方找到它,并且没有从头开始编写的经验,但可能最终成为唯一的方法。

正因为如此,我有理由为所有内容删除Etags。我让客户端缓存所有内容(过期和最后修改),所以一旦从服务器获取静态文件,它就永远不需要再次查询服务器,直到它过期。就像使用Etags一样,您仍然需要向服务器请求每个文件,以确定标记是否仍然匹配。因此,使用客户端缓存只会请求您需要的内容。

我还有一个版本控制系统,所以当发生变化时,静态内容会被引用为 my.js?12345 而不是 my.js?12344 。无论如何,重点是我目前认为删除Etags将大大改善我当前项目的瓶颈之一。

2 个答案:

答案 0 :(得分:53)

您可以使用IIS Rewrite Module 2.0删除ETag。以下重写规则应该这样做:

<rewrite>
   <outboundRules>
      <rule name="Remove ETag">
         <match serverVariable="RESPONSE_ETag" pattern=".+" />
         <action type="Rewrite" value="" />
      </rule>
   </outboundRules>
</rewrite>

You can see an example image of the rule configuration in IIS Manager on my blog

答案 1 :(得分:12)

对于那些在寻找相同解决方案时遇到此答案但对于 IIS 8或IIS 8.5 的人来说,这就是我想出的。感谢this post on blogs.iis.net让我指出了正确的方向。

IIS文档网站上的参考:clientCache

在您的web.config中,添加:

<configuration>
    ...
    <system.webServer>
    ...
        <staticContent>
            <clientCache setEtag="false"/>
        </staticContent>
    ...
    </system.webServer>
    ...
</configuration>