簡體   English   中英

動態壓縮時如何修復err_content_decoding_failed?

[英]how to fix err_content_decoding_failed when dynamic compressing?

我正在開發一個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流。“

我們遇到此問題導致IIS臨時壓縮文件由於磁盤空間不足而損壞/截斷:

  1. 運行inetmgr
  2. 轉到機器, 壓縮功能
  3. 刪除Cache目錄的內容

我的一位同事有同樣的問題。

他正在使用非標准應用程序池標識運行他的應用程序。 為了解決這個問題,我將稱之為SomeOtherApplicationPoolIdentity

問題是它缺少對其緩存目錄中的子文件夾的權限(要查看IIS使用的緩存目錄,請轉到IIS管理器,單擊頂級樹節點,單擊“壓縮”;默認情況下,它是%SystemDrive%\\inetpub\\temp\\IIS Temporary Compressed Files ):

在此輸入圖像描述

%SystemDrive%\\inetpub\\temp\\IIS Temporary Compressed Files ,他缺少一個名為SomeOtherApplicationPoolIdentity的子文件夾的權限,該子文件夾根據其應用程序池標識進行了上下文命名,因此他只是從該子文件夾繼承父文件夾的權限文件夾和它工作,因為父文件夾通常授予IIS_IUSRSSYSTEMAdministrators和本地管理用戶帳戶的權限。

嘗試指定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,則在使用響應填充輸出緩存后仍將發生動態壓縮。

我的想法是檢查應用程序池用戶(如果您有任何特定的)是否擁有目錄“%SystemDrive%\\ inetpub \\ temp \\ IIS臨時壓縮文件”的完全權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM