IIS 7.5 从响应中删除 etag 标头

发布于 2024-12-13 07:38:41 字数 756 浏览 3 评论 0原文

我知道这个问题已经被问过很多次了,但大多数是在 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 将极大地改善我当前项目的瓶颈之一。

I know this question has been asked alot of times, however most of them were in 2009-2010.

I am pretty sure a while back a project I was working on removed them, however I cannot find any way to remove them at the moment.

So has there been any advances in this field? It seems crazy that microsoft has made IIS to not be able to easily configure these headers.

Currently have tried:

  • Adding a blank etag header to the web.config
  • Adding an etag with quotes inside to the web.config
  • Adding a blank etag header directly through IIS
  • Adding a custom module which removes an etag on BeginResponse
  • Same as above but for EndResponse
  • Same as both above but instead of removing an etag, make it empty

I hear there is an ISAPI filter you can get to remove them, but I cannot find it anywhere, and have no experience in writing one from scratch but may end up being the only way to do it.

Just so there is some reason why I want to remove Etags for everything. I let the clients cache everything (expires & last-modified) so once my static files are gotten from the server it never needs to query the server again until it expires. As if you use Etags you still need to make a request to the server for each file to find out if the tag still matches. So using the client cache you only make requests for the content you need.

I also have a versioning system in place so when a change happens the static content is then referenced as my.js?12345 rather than my.js?12344. Anyway the point is I currently believe removing Etags will greatly improve one of the bottlenecks on my current project.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

無心 2024-12-20 07:38:41

您可以使用 IIS 重写模块 2.0 删除 ETag。以下重写规则应该可以做到这一点:

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

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

You can use the IIS Rewrite Module 2.0 to remove the ETag. The following rewrite rule should do it:

<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.

强辩 2024-12-20 07:38:41

对于IIS 8(及更高版本)

感谢您blogs.iis.net 上的这篇文章 为我指出了正确的方向 方向。

参考:IIS 文档网站上的 clientCache

在您的 web.config 中,添加:

<configuration>
    <system.webServer>
    ...

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

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

For IIS 8 (and onward)

Thank you to this post on blogs.iis.net for pointing me in the right direction.

Reference: clientCache on the IIS documentation website.

In your web.config, add:

<configuration>
    <system.webServer>
    ...

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

    ...
    </system.webServer>
</configuration>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文