所以,我有点IIS7 n00b,但我已经使用了大多数旧的IIS系统回到3.我试图打开dynamic压缩,它的工作,主要是。 它不适用于我的ADO.Net数据服务(Astoria)请求,批处理或不。
我发现失败的请求(FREB)跟踪 ,这真的很有帮助。 而我在Reason Code 12, NO_MATCHING_CONTENT_TYPE
请求上看到的是Reason Code 12, NO_MATCHING_CONTENT_TYPE
。 好的,所以我没有指定匹配的MIMEtypes,这很容易。
除了这是我在我的web.config(我认为是正确的,但也许不)。
<httpCompression dynamicCompressionDisableCpuUsage="100" dynamicCompressionEnableCpuUsage="100" noCompressionForHttp10="false" noCompressionForProxies="false" noCompressionForRange="false" sendCacheHeaders="true" staticCompressionDisableCpuUsage="100" staticCompressionEnableCpuUsage="100"> <dynamicTypes> <clear/> <add mimeType="*/*" enabled="true" /> </dynamicTypes> <staticTypes> <clear/> <add mimeType="*/*" enabled="true" /> </staticTypes> </httpCompression> <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />
现在我认为这意味着它应该压缩任何包含Accept:Gzip头的请求。 我很想知道别人可能在这里想什么。
我的提琴手痕迹:
GET /SecurityDataService.svc/GetCurrentAccount HTTP/1.1 Accept-Charset: UTF-8 Accept-Language: en-us dataserviceversion: 1.0;Silverlight Accept: application/atom+xml,application/xml maxdataserviceversion: 1.0;Silverlight Referer: http://sdev03/apptestpage.aspx Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3) Host: sdev03 Connection: Keep-Alive Cookie: .ASPXAUTH=<snip> HTTP/1.1 200 OK Cache-Control: no-cache Content-Type: application/atom+xml;charset=utf-8 Server: Microsoft-IIS/7.0 DataServiceVersion: 1.0; X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET Date: Mon, 22 Mar 2010 22:29:06 GMT Content-Length: 2726 <?xml version="1.0" encoding="utf-8" standalone="yes"?> *** <snip> removed ***
OK,事实certificate,你不能在web.config中configuration这个,只有appHost.config。 我认为文档确实说了appHost.config,但是我认为这是一个通用概念的规范,而不是唯一允许的configuration位置。
从全新安装,我的applicationHost.config
(在%windir%\system32\inetsrv\config
)有以下设置:
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
…以及一个默认的MIMEtypes来压缩,不幸的是,不包括JSON和其他数据types,这将是很好的压缩候选。
切换到:
<section name="httpCompression" overrideModeDefault="Allow" />
可以在web.config
的system.webServer
标记下configurationhttpCompression
标记。
我通过将httpCompression
部分设置为:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> <dynamicTypes> <add mimeType="*/*" enabled="false" /> </dynamicTypes> <staticTypes> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression>
…现在我可以在web.config
设置我想要压缩的所有MIMEtypes。
彼得,谢谢你的提示 – 我们也发现了这个设定
<add mimeType="application/atom+xml; charset=utf-8" enabled="true" />
在<httpCompression>
的<httpCompression>
部分解决了这个问题。
由于压缩代码中的错误,我们还必须指定编码 :
在压缩代码中有一个错误,它不能正确地parsing响应头中的字符集,所以你必须在dynamic压缩设置中configuration“application / xml; charset = utf-8”才能使它工作。
以下是相关部分的完整内容
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" /> <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" /> <dynamicTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/atom+xml; charset=utf-8" enabled="true" /> <add mimeType="*/*" enabled="false" /> </dynamicTypes> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/javascript" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression>
要从PowerShell添加缺less的mimetypes,请使用以下命令:
Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='application/javascript'; enabled='True'} Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='image/svg+xml'; enabled='True'} Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='text/css'; enabled='True'}
请注意,mimeTypes的顺序非常重要,因为IIS似乎需要首先匹配。 这意味着带有通配符(*)的mimeTypes应该在没有通配符的mimeType下面。 因此,请确保mimeType */*
位于底部,因为下面的任何条目都不会被使用
编辑:
IIS很糟糕,所以最好的select是清除staticTypes,然后按照正确的顺序再次添加一切:
Clear-WebConfiguration -Filter "//system.webServer/httpCompression/staticTypes/add" -PSPath 'IIS:\' SetCompressionOfMimeType 'text/*' 'True' SetCompressionOfMimeType 'application/javascript' 'True' SetCompressionOfMimeType 'image/svg+xml' 'True' SetCompressionOfMimeType 'text/css' 'True' SetCompressionOfMimeType '*/*' 'False' function SetCompressionOfMimeType($mimeType, $enabled){ Write-Output "Setting compression for $mimeType to $enabled" Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -Value @{mimeType=$mimeType; enabled=$enabled} }