我正在开发一个ASP.Net网站,目前正在优化它。 我正在尝试为其启用动态内容压缩,但它不起作用。
我得到了
错误330(net :: ERR_CONTENT_DECODING_FAILED):未知错误。
在我的开发环境中,它运行良好。
我安装了带有IIS的AWS EC2服务器Windows 2008 R2。
将此添加到web.config:
<httpCompression
directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
dynamicCompressionDisableCpuUsage="90"
dynamicCompressionEnableCpuUsage="80"
maxDiskSpaceUsage="100" minFileSizeForComp="2700"
noCompressionForRange="true"
sendCacheHeaders="false"
staticCompressionDisableCpuUsage="100"
staticCompressionEnableCpuUsage="80"
>
<scheme name="gzip"
dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/xml" 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="application/json" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/rss+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true" />
任何人都知道可能出现什么问题?
提前致谢。
修改 尝试通过fiddler运行请求并得到响应: “内容无法解压缩。
GZip标头中的幻数不正确。确保传入GZip流。“
答案 0 :(得分:8)
我们遇到此问题导致IIS临时压缩文件由于磁盘空间不足而损坏/截断:
inetmgr
答案 1 :(得分:5)
我的一位同事有同样的问题。
他正在使用非标准应用程序池标识运行他的应用程序。为了这个解决方案,我将称之为SomeOtherApplicationPoolIdentity
。
问题是它缺少对其缓存目录中的子文件夹的权限(要查看IIS使用的缓存目录,请转到IIS管理器,单击顶级树节点,单击“压缩”;默认情况下,它是%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
):
在%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
内部,他缺少一个名为SomeOtherApplicationPoolIdentity
的子文件夹的权限,该子文件夹根据其应用程序池标识进行上下文命名,因此他只是从该子文件夹中继承父文件夹的权限文件夹和它工作,因为父文件夹通常授予IIS_IUSRS
,SYSTEM
,Administrators
和本地管理用户帐户的权限。
答案 2 :(得分:1)
尝试指定dynamicCompressionBeforeCache =“false”
我试图使用dynamicCompressionBeforeCache =“true”,因为我认为它会导致我的缓存对象被压缩保存 - 这样它们就可以作为较小的文件提供,但是会出现同样的错误......
<!--http://www.iis.net/configreference/system.webserver/urlcompression-->
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
<httpCompression
directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
dynamicCompressionDisableCpuUsage="90"
dynamicCompressionEnableCpuUsage="80"
maxDiskSpaceUsage="100"
minFileSizeForComp="2700"
noCompressionForRange="true"
sendCacheHeaders="false"
staticCompressionDisableCpuUsage="100"
staticCompressionEnableCpuUsage="80">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/xml" 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="application/json" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/rss+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
http://www.iis.net/configreference/system.webserver/urlcompression
dynamicCompressionBeforeCache属性指定IIS是否会 动态压缩尚未缓存的内容。当。。。的时候 dynamicCompressionBeforeCache属性为true,动态为IIS 在第一次发出请求并排队时压缩响应 压缩内容。提供后续请求 动态,直到压缩响应已添加到缓存 目录。将压缩响应添加到缓存后 目录,缓存的响应被发送到客户端以供后续使用 要求。当dynamicCompressionBeforeCache为false时,IIS返回 未压缩的响应,直到压缩响应被添加到 缓存目录。
注意:如果dynamicCompressionBeforeCache属性为true时为 输出缓存响应已刷新,动态压缩不会 在将响应放入输出缓存之前执行。 但是,如果doDynamicCompression属性为true,则为动态 填充输出缓存后仍将发生压缩 随着回应。
答案 3 :(得分:0)
我的想法是检查应用程序池用户(如果您有任何特定内容)是否具有目录“%SystemDrive%\ inetpub \ temp \ IIS临时压缩文件”的完全权限