在asp.net中使用Http模块配置ETag

时间:2012-07-09 10:54:36

标签: asp.net etag

我通过seo优化和yslow优化我们公司的网站。 但是在yslow中,ETAGS是F. 我已经浏览了数十个网站和教程,最好的选择是使用HTTP模块。 我已经这样做并尝试了几个模块,但没有一个显示结果。可能是语法错误或我注册错误。有人说最好使用app_PostReleaseRequestState而不是OnPreSendRequestHeaders,因为堆崩溃了。我使用过两者都没有结果。 这里是 : 文件名是etag,它位于app-code文件夹中

网络配置:

<system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
        <add type="CompressionModule" name="CompressionModule"/>
            <add type="ETags" name="ETags"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
    </system.webServer>

这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for ETags
/// </summary>

    public class ETags : IHttpModule
    {
        public void Dispose() { }
        public void Init(HttpApplication app)
        {
            app.PostReleaseRequestState += new EventHandler(app_PostReleaseRequestState);

        }
        void app_PostReleaseRequestState(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Headers.Remove("ETag");
            HttpContext.Current.Response.Headers.Remove("Server");
            HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
            HttpContext.Current.Response.Headers.Remove("X-Powered-By");
        }
        //public void Init(HttpApplication context)
        //{
        //    context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        //}

        //void OnPreSendRequestHeaders(object sender, EventArgs e)
        //{
        //    HttpContext.Current.Response.Headers.Remove("ETag");
        //    HttpContext.Current.Response.Headers.Remove("Server");
        //    HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
        //    HttpContext.Current.Response.Headers.Remove("X-Powered-By");
        //}
    }

感谢您的回答。

1 个答案:

答案 0 :(得分:3)

首先,您可以删除服务器中的服务器标签!并且不要让他一次又一次地放置它然后你将它移除。

您甚至可以使用customHeaders

在web.config上执行此操作
<httpProtocol>
    <customHeaders>
        <remove name="X-Powered-By" />
        <remove name="X-UA-Compatible" />
        <remove name="ETag" />
    </customHeaders>
</httpProtocol>        

The ETag or entity tag是标记页面的方法,然后在您的代码上查看页面是否已更改并需要更新。如果您看到ETag,那么您的代码的某些部分将被添加用于此检查,并且我认为您必须将其保留原样,因为您违反了该程序的逻辑。

如果这个ETag是服务器放置标记图像或类似项目的地方,你可以通过添加更多静态内容来避免大部分标记,这也可以在iis上完成,或者在web.config上完成。

<staticContent>
    <clientCache cacheControlMaxAge ="8.00:00:00" cacheControlMode="UseMaxAge" />
</staticContent>

所以我认为你所做的模块并不是必需的。