6

我正在开发一个 ASP.Net 网站,目前正在对其进行优化。我正在尝试对其启用动态内容压缩,但它不起作用。

我明白了

错误 330 (net::ERR_CONTENT_DECODEDING_FAILED):未知错误。

  • 在我的开发环境中,它运行良好。

    • 我已经在发布模式下构建了项目我已经添加了动态内容压缩模块,启用了动态内容压缩并检查了这是我收到的。
  • 我有一个安装了 IIS 的 AWS EC2 服务器 windows 2008 R2。

    • 我已经在发布模式下构建了项目,并将其发布到一个文件夹,我将其部署到服务器。
    • 我已经尝试使用与开发人员机器上相同的 web.config 文件,但没有运气

将此添加到 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" />

有人知道可能出了什么问题吗?

提前致谢。

编辑: 尝试通过提琴手运行请求并得到响应:“内容无法解压缩。

GZip 标头中的幻数不正确。确保您传递的是 GZip 流。”

4

4 回答 4

8

我们遇到了这个问题,导致 IIS 临时压缩文件由于磁盘空间不足而损坏/截断:

  1. inetmgr
  2. 转到机器,压缩功能
  3. 删除Cache目录的内容
于 2015-08-18T10:02:04.913 回答
5

我的一个同事也有同样的问题。

他正在使用非标准应用程序池身份运行他的应用程序。为了这个解决方案,我称之为 identity SomeOtherApplicationPoolIdentity

问题是它缺少对他缓存目录中的子文件夹的权限(要查看 IIS 使用的缓存目录,请转到 IIS 管理器,单击顶级树节点,单击压缩;默认情况下是%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files):

在此处输入图像描述

在 内部%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files,他缺少一个名为 的子文件夹的权限,该子文件夹SomeOtherApplicationPoolIdentity根据他的应用程序池标识上下文命名,所以他只是从该子文件夹继承父文件夹的权限并且它起作用了,因为父文件夹通常授予权限、IIS_IUSRSSYSTEMAdministrators本地管理用户帐户。

于 2015-12-02T19:47:07.197 回答
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属性为真,则在响应被放入输出缓存之前不会执行动态压缩。但是,如果 doDynamicCompression 属性为 true,则在输出缓存被响应填充后仍会发生动态压缩。

于 2015-01-12T22:53:19.257 回答
0

我的想法是检查应用程序池用户(如果您有任何特定用户)是否对目录“%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files”拥有完全权限

于 2013-04-12T12:50:06.757 回答