我怎样才能在IIS7工作中获得gzip压缩?

我为IIS7安装了静态和动态压缩,并在我的应用程序Virtual Folder级别设置了两个web.config值。 据我了解,我不需要在服务器或站点级别启用压缩,并且可以使用我的web.config文件以每个文件夹为基础对其进行管理。

我在我的.config文件中有两个设置,我已经设置为我的应用程序自定义gzip:

<httpCompression dynamicCompressionDisableCpuUsage="90"
    dynamicCompressionEnableCpuUsage="0">
  <scheme name="gzip" dll="%Windir%system32inetsrvgzip.dll" />
  <dynamicTypes>
    <remove mimeType="*/*"/>
    <add mimeType="*/*" enabled="true" />
  </dynamicTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
    dynamicCompressionBeforeCache="true" />

但是,当我运行该应用程序时,我可以清楚地看到没有使用gzip,因为我的页面大小是相同的。 我也使用YSlow作为FireFox,这也证实我的页面没有被粘贴。

我在这里错过了什么? 在IIS6中,指定文件类型并在0-10之间设置压缩级别非常简单。 我没有看到需要说明的文件类型或压缩级别,因为默认值似乎覆盖了文件类型,而且我没有在任何地方看到该级别。


在iis 7测试版中,forums.iis.net上有一个关于此的线程。 原来那个家伙没有安装模块,但这听起来像是你从开始的句子中判断出来的。

微软对他的重要建议是启用失败的请求追踪来找出发生了什么问题。 这可能是IIS7中最受关注的功能之一,但它肯定是最强大的功能之一。

  • 打开IIS管理器。
  • 转到您的网站,然后在操作窗格(最右侧)上单击“配置”部分下的“失败的请求跟踪...”。
  • 点击“启用”。
  • 然后,在功能视图中,点击“失败的请求追踪规则”。 点击添加,然后输入200作为状态码,然后点击完成。
  • 如果在操作窗格中看不到“失败的请求追踪”,则需要使用“添加角色服务”向导(运行状况和诊断追踪)或通过Web平台安装程序将该功能添加到服务器(Products Server IIS:Tracing),然后关闭并重新打开IIS管理器。

    接下来,重新运行你的测试。 这会生成一些日志信息供我们检查。

    查看c: inetpub logs FailedReqLogFiles w3svcx。 您将看到一堆名为fr000xx.xml的文件。 在你的浏览器中打开它们中的任何一个。 (顺便说一句,如果你在任何地方复制这些文件,请确保freb.xsl在那里。另外,不要删除freb.xsl - 如果你这样做,只需删除整个目录或从另一个位置复制它,因为IIS只创建它每个文件夹一次。)

    点击“请求详细信息”标签并选择“完成请求跟踪”。 在页面上搜索“压缩” - 你应该在几个地方找到它; 一次用于静态内容,一次用于动态内容。

    如果您没有找到它们中的任何一个,则IIS配置不正确。 如果你确实找到了它们,你应该看到它们后面跟着一个compression_success和一个compression_do。 成功是自我解释的; 'do'表示它做了什么 - 在我的情况下,它显示“OriginalSize 1462784 CompressedSize 179482”

    由于你的工作不正常,希望你会看到不同的东西来帮助你解决问题。

    确保在完成后关闭此功能,方法是禁用网站操作窗格中的失败请求跟踪。


    我们有一个类似的问题,事实证明,IIS7在这里执行一些动态的基于CPU的节流。

    http://www.iis.net/ConfigReference/system.webServer/httpCompression

    dynamicCompressionDisableCpuUsage

    可选的uint属性。

    指定将禁用动态压缩的CPU利用率的百分比。

    注意:此属性充当动态压缩关闭时的CPU上限。 CPU利用率低于dynamicCompressionEnableCpuUsage属性中指定的值时,将重新启用动态压缩。

    默认值是90。


    dynamicCompressionEnableCpuUsage

    可选的uint属性。

    指定CPU使用率的百分比,低于该百分比将启用动态压缩。 该值必须介于0和100之间。平均CPU利用率每30秒计算一次。

    注意:此属性用作较低的CPU限制,低于该限制时,会启用动态压缩。 当CPU利用率超过dynamicCompressionDisableCpuUsage属性中指定的值时,动态压缩将被禁用。

    默认值是50。

    请注意默认值 - 如果您的IIS7达到90%CPU使用率,它将禁用所有动态gzip内容,直到CPU使用率回落到50%以下!

    此外,还有一些关于GZIP实际CPU成本的重要建议和基准。

    http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

    长话短说,除非你经常拥有超过200kb的动态页面,这是一个没有问题的问题。


    遵循JohnW的出色建议,我也使日志能够找到罪魁祸首,尽管失败的原因证明是不同的:

    STATIC_COMPRESSION_NOT_SUCCESS 
    Reason 14 
    Reason NOT_FREQUENTLY_HIT
    

    总之,看起来如果你没有足够频繁地浏览页面,IIS7就不会认为它值得压缩,这对我来说似乎有点奇怪。 尽管如此,在这种情况下是有道理的,因为我只是试图在本地机器上测试它。

    根据此页面,默认情况下,页面必须在10秒内点击2次才能成为“频繁击中”。 如果你真的想,你可以覆盖applicationHost.config(%systemroot% Windows System32 inetsrv config)中的默认值。 至少对我来说这是一个锁定的属性,所以你不能在自己的web.config中覆盖它。

    <serverRuntime frequentHitThreshold="1" />
    

    另外,我现在注意到,这里已经有了这个答案:在IIS7中,gzip文件不会保持这种状态。

    链接地址: http://www.djcxy.com/p/43805.html

    上一篇: How can I get gzip compression in IIS7 working?

    下一篇: Could not load type module C#