IIS 7.5从响应中删除etag标头

Gro*_*fit 27 iis etag caching iis-7.5 http-headers

我知道很多次都会问这个问题,但大多数问题都发生在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将大大改善我当前项目的一个瓶颈.

Nat*_*Fox 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>
Run Code Online (Sandbox Code Playgroud)

您可以在我的博客上的IIS管理器中查看规则配置的示例图像.

  • 会尝试一下,如果它有效,我会在男人中为你赢得一个国王! (3认同)
  • 请务必清除浏览器缓存,否则可能会从缓存中删除.我遇到过同样的问题.我确定它有效,我已经在我的博客上实现了它,你不应该看到ETags. (3认同)
  • 这确实有效,但要清楚的是,上面的代码必须放置在 `&lt;system.webServer&gt;` 节点内,并且您必须安装 IIS 重写模块:http://www.iis.net/downloads/microsoft/url-改写 (2认同)

Vin*_*rst 12

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

参考:IIS文档网站上的clientCache.

在您的web.config中,添加:

<configuration>
    ...
    <system.webServer>
    ...
        <staticContent>
            <clientCache setEtag="false"/>
        </staticContent>
    ...
    </system.webServer>
    ...
</configuration>
Run Code Online (Sandbox Code Playgroud)