IIS 7.5如何从响应中删除ETag头部信息

28

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

我相信一段时间前我正在处理的一个项目已经移除了它们,但是现在我找不到任何方法来删除它们。

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

我已经尝试过:

  • 在web.config中添加空的etag标头
  • 在web.config中添加带引号的etag标头
  • 直接通过IIS添加一个空的etag标头
  • 添加一个在BeginResponse上删除etag的自定义模块
  • 与上述相同,但在EndResponse上
  • 与上述两个相同,但将etag变为空

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

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

我还有一个版本控制系统,因此当更改发生时,静态内容将被引用为my.js?12345而不是my.js?12344。无论如何,我的观点是,目前我相信删除Etags将极大地改善我当前项目中的一个瓶颈。

2个回答

54

3
我会尝试一下,如果有效,我会尊你为万人之王! - Grofit
3
请确保清除您的浏览器缓存,可能会从缓存中拉取。我遇到了同样的问题。我确定它有效,我已经在我的博客上实施了它,所以您不应该看到ETags。 - Nathan Fox
1
你说得对!干得好!因为你找到了一个解决超级烦人问题的方法,所以值得称赞。 - peter3
1
清除了浏览器缓存后,它对我起作用了!它将我的 YSlow 分数提高了 3 分,并且我不再遇到 ETag 错误。非常感谢 @Nathan Fox!感谢您分享您的知识! - Jason Weber
2
这确实有效,但需要明确的是,上述代码必须放置在<system.webServer>节点内,并且您必须安装IIS Rewrite模块:http://www.iis.net/downloads/microsoft/url-rewrite - FiniteLooper
显示剩余3条评论

14
对于IIS 8(及更高版本)
感谢这篇博客文章在blogs.iis.net上指引我正确的方向。
参考:IIS文档网站上的clientCache
在你的web.config文件中添加以下内容:
<configuration>
    <system.webServer>
    ...

        <staticContent>
            <clientCache setEtag="false"/>
        </staticContent>

    ...
    </system.webServer>
</configuration>

哦...那是IIS 8及更高版本。我试图在IIS 7.5上使用,结果只得到了“无法识别属性'setEtag'”的错误信息。在IIS 8.0及更高版本中可以完美运行。我已经在IIS 10.x上进行了测试。 - RBT
在我阅读的大多数地方,都说要停止发出ETags 会配置 Web 服务器是根本不可能的。很高兴看到您的文章。 - RBT
请确保在HTTP响应头中删除任何手动添加的ETag条目。 - MeSo2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接