我有两个运行 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 设置等...)但我想将所有内容视为可能的原因。
更多信息:
www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-iis-compression-issues-in-iis6-iis7x
stackoverflow.com/a/7634875/1131855
生产(压缩不起作用)
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/