asp.net - IIS 7.5 动态压缩不起作用 - NO_MATCHING_CONTENT_TYPE

标签 asp.net iis-7

我有两个运行 IIS 7.5(生产和 QA)的相同 64 位 Windows 2008 R2 服务器。

两者都以相同的方式安装、启用和配置动态压缩。

问题:

我的生产服务器不做任何东西的动态 gzip 压缩,而 QA 服务器做 gzip 压缩我期望的。

好消息 失败的请求跟踪日志显示了一个原因:

原因代码:12 NO_MATCHING_CONTENT_TYPE

坏消息 是因为两个服务器的 applicationHost.config 文件中的压缩设置是相同的。我从未手动编辑过它们,我让 WinMerge 对它们进行了比较(包括空格),并且我没有在 web.config 中配置任何与此相关的内容。

这是来自 PROD 机器的两个压缩相关部分(同样,它们在 QA 机器上是相同的):

    <section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
        <staticTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/x-javascript" enabled="true" />
            <add mimeType="application/atom+xml" enabled="true" />
            <add mimeType="application/xaml+xml" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </staticTypes>
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/x-javascript" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </dynamicTypes>
    </httpCompression>

对我来说,看起来像上面的配置,我不应该得到 NO_MATCHING_CONTENT_TYPE。 ASPX 文件返回 text/html 的内容类型,并且配置清楚地显示启用了 mimeType text/*。

鉴于错误消息,我认为我在下一节中检查的许多内容甚至不应该适用(权限/压缩禁用和启用 cpu 设置等...)但我想将所有内容视为可能的原因。

更多信息:
  • 保持简单,我现在只关注 ASPX 页面(我试图让“开箱即用”的压缩工作,而不是像 JSON 这样特殊的东西......)
  • 我相信,当我在 6 个月前启动这些服务器并配置压缩时,我验证了它们都可以工作。从那以后我没有更改任何配置设置,因此请考虑此信息的值(value)。
  • 我已经完成了以下操作,但他们没有解决我的问题:

  • www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-iis-compression-issues-in-iis6-iis7x

    stackoverflow.com/a/7634875/1131855
  • 我已经比较了 system.webServer/HttpCompression 的服务器“配置编辑器”设置,两者都是相同的。
  • dynamicCompressionDisableCpuUsage 和 dynamicCompressionEnableCpuUsage 设置是它们的默认值,分别为 90 和 50。虽然有时 Web 服务器 CPU 可能会达到 90%,但我经常对其进行监控,而且它几乎总是远低于 50%。
  • 我已经检查了使用 ApplicationPool 设置的用户的权限,并且该用户对完成压缩的文件夹具有 FullControl 权限。
  • 以下是每个服务器上同一页面的请求和响应 header :

  • 生产(压缩不起作用)
    GET /Default.aspx HTTP/1.1
    Host: www.sitenameremoved.com
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
    Referer: https://www.sitenameremoved.com/auth/authLogon.aspx
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8
    
    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Length: 274135
    Content-Type: text/html; charset=utf-8
    Server: Microsoft-IIS/7.5
    X-Frame-Options: SAMEORIGIN
    X-XSS-Protection: 1; mode=block
    Date: Thu, 19 Mar 2015 12:07:02 GMT
    Strict-Transport-Security: max-age=7776000
    

    QA(压缩工作)
    GET /Default.aspx HTTP/1.1
    Host: qa.sitenameremoved.com
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
    Referer: https://qa.sitenameremoved.com/auth/authLogon.aspx
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8
    
    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: text/html; charset=utf-8
    Content-Encoding: gzip
    Vary: Accept-Encoding
    Server: Microsoft-IIS/7.5
    X-Frame-Options: SAMEORIGIN
    X-XSS-Protection: 1; mode=block
    Date: Thu, 19 Mar 2015 12:08:16 GMT
    Content-Length: 64963
    Strict-Transport-Security: max-age=7776000
    

    我已经搜索到互联网的尽头。我错过了什么?

    其他可能的有趣信息(稍后添加)

    为了查看是否可以在我的 QA 框中重现该问题,我使用配置编辑器从 system.webServer/httpCompression 下的“dynamicTypes”条目中删除了 text/* mime 类型。

    我启用了失败请求跟踪,重新启动 IIS,点击登录页面并在 Fiddler 中看到它没有被压缩。我查看了失败请求跟踪生成的 xml 文件,正如预期的那样,动态压缩失败,原因是 12 NO_MATCHING_CONTENT_TYPE。

    然后我重新添加了 text/* mime 类型,重新启动了 IIS,当然压缩再次起作用了。

    我每周在 Prod 服务器上回收一次 AppPool,但今晚我将回收 IIS,看看它是否读取配置设置并开始工作......

    谢谢,
    布伦特

    最佳答案

    解决方案:

    我在生产盒上回收了 IIS,没有其他变化,压缩立即开始工作。所以,一切都被正确配置,并且在一段时间内一定有一些东西被“固定”,但我不知道什么或如何。

    关于asp.net - IIS 7.5 动态压缩不起作用 - NO_MATCHING_CONTENT_TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146825/

    相关文章:

    asp.net - Chrome 87 在针对 Windows IIS 10 的 CORS 中的 Windows 身份验证失败

    c# - Umbraco 7 和 Visual Studio 2013

    c# - 解决 'configuration object is read only, because it has been committed by a call to ServerManager.CommitChanges()'?

    iis - 通过与 ASPX 文件相同的服务器处理程序运行 JS 文件。

    c# - 无法加载文件或程序集 log4net 或其依赖项之一

    HTML 将元素放在同一行

    .net - 汇集我的连接对我来说有多重要?

    iis-7 - 限制来自 IIS7 中单个源的 HTTP 连接数?

    iis - 在 IIS 7 中重定向网站的最佳方式

    asp.net - 在 IIS7 的 ASP.NET MVC 3 中找不到图像