【问题标题】:Configuring ETags with Http module in asp.net在 asp.net 中使用 Http 模块配置 ETag
【发布时间】:2012-07-08 18:26:58
【问题描述】:

我正在使用 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");
        //}
    }

感谢您的回答。

【问题讨论】:

    标签: asp.net etag


    【解决方案1】:

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

    您甚至可以在 web.config 上使用customHeaders

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

    所以我认为你制作的模块对于这个认为是不必要的。

    【讨论】:

    • 您好,感谢您的建议,但是:1. 我在 Web 配置中添加了 http 协议,但什么也没有。这是来自 microsoft 站点分析的标头:Content-Encoding: Content-Length: 7103 Cache-Control: private内容类型:文本/html; charset=utf-8 日期:星期一,2012 年 7 月 9 日 13:50:17 GMT X-AspNet-版本:4.0.30319 2。 ETAGs 还在那儿检查自己link 3. 第二个(静态内容单独添加到所有子文件夹中)
    • @imijan 你运行什么版本的 IIS?如果这不起作用是因为那个。思路还是一样的,直接在服务器上删除。
    • 对于不起作用的自定义标头:mark.mymonster.nl/2011/10/18/…
    • iis 是 7.5,我无法使用它。我只能修改网络配置或对其进行编程或使用 WEBSITEPANEL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多