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

Posted

技术标签:

【中文标题】IIS 7.5 动态压缩不起作用 - NO_MATCHING_CONTENT_TYPE【英文标题】:IIS 7.5 Dynamic Compression not working - NO_MATCHING_CONTENT_TYPE 【发布时间】:2015-05-22 16:46:55 【问题描述】:

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

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

问题:

我的生产服务器不会对任何东西进行动态 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 个月前启动这些服务器并配置压缩时,我验证了它们都可以正常工作。从那以后,我没有更改任何配置设置,因此请记住这些信息的价值。

    我已经完成了以下操作,但他们没有解决我的问题:

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

***.com/a/7634875/1131855

    我已经比较了 system.webServer/HttpCompression 的服务器“配置编辑器”设置,两者都是相同的。

    dynamicCompressionDisableCpuUsage 和 dynamicCompressionEnableCpuUsage 设置是它们的默认值,分别为 90 和 50。虽然有时 Web 服务器 CPU 可能会达到 90%,但我经常对其进行监控,它几乎总是远低于 50%。

    我已经检查了我有 ApplicationPool 设置要使用的用户的权限,并且该用户对完成压缩的文件夹具有 FullControl 权限。

    以下是每台服务器上同一页面的请求和响应标头:

生产(压缩不起作用)

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 中看到它没有被 gzip 压缩。我查看了 Failed Request Trace 生成的 xml 文件,正如预期的那样,动态压缩失败,原因是 12 NO_MATCHING_CONTENT_TYPE。

然后我又添加了 text/* mime 类型,重新启动了 IIS,当然压缩又开始工作了。

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

谢谢, 布伦特

【问题讨论】:

【参考方案1】:

解决方案:

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

【讨论】:

以上是关于IIS 7.5 动态压缩不起作用 - NO_MATCHING_CONTENT_TYPE的主要内容,如果未能解决你的问题,请参考以下文章

如果不明确选中使用 IIS 7.5 进行动态压缩的复选框,动态压缩是不是可以工作?

IOS 的 C# PushSharp 通知在 IIS 7.5 中不起作用

iis 7.5 dns windows身份验证页面用户身份不起作用

如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

IIS 7.5 上的调试与发布模式

密码保护 IIS 7.5 中的 ASP.NET Web 应用程序