【问题标题】:how to fix err_content_decoding_failed when dynamic compressing?动态压缩时如何修复err_content_decoding_failed?
【发布时间】:2013-02-27 12:25:14
【问题描述】:

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

我明白了

错误 330 (net::ERR_CONTENT_DECODING_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" />

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

提前致谢。

编辑: 尝试通过 fiddler 运行请求并得到响应: "内容无法解压。

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

【问题讨论】:

  • 您知道这是什么问题吗?我遇到了同样的问题。 . .

标签: asp.net iis-7 compression


【解决方案1】:

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

  1. 运行inetmgr
  2. 转到机器,压缩功能
  3. 删除缓存目录的内容

【讨论】:

    【解决方案2】:

    我的一个同事也遇到了同样的问题。

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

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

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

    【讨论】:

    • 谢谢! APP 池用户设置为 LOCAL_SERVICE。擦除临时文件夹内容,并添加具有临时文件夹完全权限的 LOCAL_SERVICE 似乎为我解决了这个问题。
    【解决方案3】:

    尝试指定 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,则动态 输出缓存被填满后,压缩仍然会发生 与响应。

    【讨论】:

    • 我正在使用 Glympse,每当我打开 Chrome 时,它​​都会返回 ERR_CONTENT_DECODING_FAILED。将此设置为 false 对我有用。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多