Caching 从IIS中删除Etag和上次修改的标头

Caching 从IIS中删除Etag和上次修改的标头,caching,iis-6,last-modified,etag,http-status-code-304,Caching,Iis 6,Last Modified,Etag,Http Status Code 304,您知道可以通过完全删除ETag和上次修改的响应头来实现吗 当然,这在Apache中很容易,但在IIS6中却一目了然。有人知道如何在IIS中删除这两个头吗?一种编程方式是使用HTTP模块,类似这样的模块(基于): 名称空间HttpModules { 使用制度; 使用System.Web; 公共类RemoveExtraneOutHeaderModule:IHttpModule { /// ///初始化模块并使其准备好处理请求。 /// ///提供对请求上下文的访问。 公共void Init(Ht

您知道可以通过完全删除ETag和上次修改的响应头来实现吗


当然,这在Apache中很容易,但在IIS6中却一目了然。有人知道如何在IIS中删除这两个头吗?

一种编程方式是使用HTTP模块,类似这样的模块(基于):

名称空间HttpModules
{
使用制度;
使用System.Web;
公共类RemoveExtraneOutHeaderModule:IHttpModule
{
/// 
///初始化模块并使其准备好处理请求。
/// 
///提供对请求上下文的访问。
公共void Init(HttpApplication上下文)
{
context.PreSendRequestHeaders+=this.OnPreSendRequestHeaders;
}
/// 
///处置此模块使用的资源(内存除外)。
/// 
公共空间处置()
{
}
/// 
///在ASP.NET将HTTP头发送到客户端之前引发的事件。
/// 
///事件源。
///事件参数。
PresentRequestHeaders上受保护的void(对象发送方、事件参数e)
{
NameValueCollection headers=HttpContext.Current.Response.headers;
删除(“服务器”);
标题。删除(“ETag”);
标题。删除(“X-Powered-By”);
标题。删除(“X-AspNet-Version”);
标题。删除(“X-AspNetMvc-Version”);
}
}
}

该模块通过web.config安装,对于IIS 6,安装在
下;对于IIS 7,安装在
下。

谢谢,这很有用。然而,IIS添加标题,然后让一些代码再次删除它们似乎效率低下。我真的更愿意“从源头”删除它们。有什么好主意吗?IIS并没有让这变得容易。这些头是由IIS核心代码添加的,其设计与Apache的功能公开方式不同。使用这样的模块非常快,可能比使用较低级别的标题管理功能更快。我非常同意。我研究过使用Isapi过滤器删除标题,但这似乎很神秘,几乎没有相关信息。我们最近采用了Akamai作为内容交付网络,我正在研究如何在这一级别上操作标题,从而提供更精细的控制。从本质上讲,问题仍然是IIS中缺乏控制。如果未在集成模式下运行,当Response.Header引发和InvalidOperationException时,这在IIS6中如何工作?
namespace HttpModules
{
    using System;
    using System.Web;

    public class RemoveExtraneousHeaderModule : IHttpModule
    {
        /// <summary>
        /// Initializes a module and prepares it to handle requests.
        /// </summary>
        /// <param name="context">Provides access to the request context.</param>
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
        }

        /// <summary>
        /// Disposes of the resources (other than memory) used by this module.
        /// </summary>
        public void Dispose()
        {
        }

        /// <summary>
        /// Event raised just before ASP.NET sends HTTP headers to the client.
        /// </summary>
        /// <param name="sender">Event source.</param>
        /// <param name="e">Event arguments.</param>
        protected void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            NameValueCollection headers = HttpContext.Current.Response.Headers;
            headers.Remove("Server");
            headers.Remove("ETag");
            headers.Remove("X-Powered-By");
            headers.Remove("X-AspNet-Version");
            headers.Remove("X-AspNetMvc-Version");
        }
    }
}