【问题标题】:IIS 7.5 remove etag headers from responseIIS 7.5 从响应中删除 etag 标头
【发布时间】:2011-12-18 08:17:30
【问题描述】:

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

我很确定不久前我正在处理的一个项目删除了它们,但是我目前找不到任何方法来删除它们。

那么在这个领域有什么进步吗?微软让 IIS 无法轻松配置这些标头似乎很疯狂。

目前已经尝试过:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用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.

    【讨论】:

    • 会试一试,如果成功的话,我会让你成为男人中的国王!
    • 请确保清除浏览器缓存,您可能正在从缓存中提取。我遇到过同样的问题。我确定它有效,我已经在我的博客上实现了它,你不应该看到 ETags。
    • 天哪!你说得对!感谢您解决一个超级烦人的问题
    • 清除浏览器缓存后,它对我有用!它使我的 YSlow 分数提高了 3 分,并且我不再收到 ETag 错误。非常感谢@Nathan Fox!感谢您分享您的知识!
    • 这确实有效,但要清楚上述代码必须放在&lt;system.webServer&gt; 节点内,并且您必须安装 IIS 重写模块:iis.net/downloads/microsoft/url-rewrite
    【解决方案2】:

    对于那些在寻找相同解决方案但对于 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>
    

    【讨论】:

    • 哦……那是 IIS 8 以后的版本。我在 IIS 7.5 中尝试过 :( 只是得到错误 Unrecognized attribute 'setEtag'。对于 IIS 8.0 及以后的版本来说就像一个魅力。我在 IIS 10.x 上测试了它
    • 在我阅读的大多数地方,根本不可能配置 Web 服务器以停止发出 ETag。很高兴看到你的帖子。
    猜你喜欢
    • 2011-04-23
    • 2018-02-23
    • 2020-11-25
    • 2016-05-09
    • 1970-01-01
    • 2012-06-24
    • 2010-09-21
    • 2013-11-18
    • 2019-11-12
    相关资源
    最近更新 更多