web-dev-qa-db-ja.com

IISアプリケーションにContent-Encodingがありません-応答ヘッダーにgzipがあります

Firebugでは、リクエストヘッダーに次のエントリがあります。
Accept-Encoding:gzip、deflate

しかし、ありません:
コンテンツエンコーディング:gzip
応答ヘッダー内。

SOや他のサイトでのいくつかの回答に従って、私が試したことに関係なく、何も機能していないようです。静的ファイルも動的ファイルも圧縮されていません。少なくとも、コンテンツエンコーディングがない場合は、gzip値が応答ヘッダーに返されます。

これが私のweb.config設定の例です:

<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true" />
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="150" staticCompressionIgnoreHitFrequency="true">
  <remove name="gzip" />
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="8" dynamicCompressionLevel="8" />
</httpCompression>

ヒット頻度を無視しました
staticCompressionIgnoreHitFrequency="true "

IISが実際に次の場所にあるファイルを圧縮していることを確認しました。
C:\ inetpub\temp\IIS一時圧縮ファイル

ここで指定されているように: IIS 8 Windows 8でgzipを設定
Windowsの機能>インターネットインフォメーションサービス> WWWサービス>パフォーマンス機能で静的および動的圧縮が有効になっていることを確認しました

私もこの男のアプローチを試しました:
IIS 7.5圧縮は圧縮ファイルを作成しますが、非圧縮ファイルを返します


編集1:
IISバージョンは10ですが、IIS 8.5でも試しました。


編集2:
私は今、このリンクにあるさまざまな構成ファイルも試しました: https://github.com/h5bp/server-configs-iis/ これはいくつかのベストのように見えるものを提供します練習用のweb.configファイル。
未解決


編集3:
@ Nkosiの入力に基づいて、まったく新しいAsp.net MVCアプリケーションを作成し、試したこれらすべてのオプションを使用して構成しました。 Fiddlerから取得した生のヘッダーは次のとおりです。

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/javascript; charset=UTF-8
Expires: Wed, 20 Jul 2016 18:22:47 GMT
Last-Modified: Wed, 20 Jul 2016 18:22:47 GMT
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 20 Jul 2016 18:22:47 GMT

ご覧のとおり、Content-Encoding:Gzipはありません
未解決


編集4:
Global.asaxセクションのBeginRequestイベントにコードを追加するこのアプローチを試しました: https://stackoverflow.com/a/27185575/392591
未解決


編集5:
だから私はSOでこの答えに基づいてトレースを有効にしてみました: https://stackoverflow.com/a/33182525/392591
失敗はありませんが、トレースファイルの一番下にGENERAL_RESPONSE_HEADERSというセクションがあり、次のように表示されます。

Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: My Little Pony
X-UA-Compatible: IE=Edge,chrome=1

そして、それはすべての静的タイプのファイルに当てはまります。
しかし、トレースファイルで次のことがわかりました。

8. STATIC_COMPRESSION_START  08:04:03.552 
9. STATIC_COMPRESSION_NOT_SUCCESS Reason="NOT_FREQUENTLY_HIT" 08:04:03.552 
10. STATIC_COMPRESSION_END  08:04:03.552 

頻繁にヒットしないという理由で圧縮が成功しない.​​.. [ヒット頻度を無視する]オプションがtrueに設定されているので、奇妙です。

そこで、IIS Managerに移動し、サーバーで[ヒット頻度を無視]をtrue(つまり、applicationHost.config)に設定すると、トレースファイルの出力が次のように変更されました。

8. STATIC_COMPRESSION_START  08:19:17.489 
9. STATIC_COMPRESSION_SUCCESS  08:19:17.489 
10. STATIC_COMPRESSION_END  08:19:17.489 

戻ってapplicationHost.configでオフにすると、静的圧縮が成功しなかったので、これは間違いなく違いを生みます。ただし、FireBugを見ると、圧縮されていないファイルが配信されており、GZIPコンテンツエンコーディングの応答ヘッダーはありません。

Failed Request Traceで気付いたもう1つの興味深いビットは、最後の2つの全体GENERAL_FLUSH_RESPONSE_ENDとGENERAL_REQUEST_ENDです。どちらも、Bootstrap.cssファイルが17903バイト(約18kb)を送信したことを示しており、IIS一時的な圧縮ファイルフォルダ。したがって、ファイルは物理的に圧縮されており、Failed Requestトレースによると、適切なコンテンツが送信されています...しかし、ブラウザは代わりに完全な117kbファイルを取得しますか?
未解決


9
Jacques

IIS10を使用していますが、web.configには

<system.webServer>
    <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />
    <!-- other config removed for brevity -->
</system.webServer>

ブラウザ(Firefox、IE11、Edge、Google Chrome)から単純なMVCアプリケーションへのテストリクエストを行うとき。

リクエストにはすべてAccept-Encoding: gzip, deflateがあり、レスポンスにはContent-Encoding:gzipが返されます。

Fiddlerでテストしたこともあります。リクエストを手動で作成する

GET http://localhost/MyWebApplication HTTP/1.1
User-Agent: Fiddler
Host: localhost
Accept-Encoding: gzip, deflate

同じ結果が得られます

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 18 Jul 2016 15:26:06 GMT
Content-Length: 3826

...

Css、Jsおよび他のすべてのテキストベースのファイルが圧縮されています。

IISおよびweb.configで圧縮が適切に構成されていることを確認するために、構成を再確認する必要がある場合があります。

更新:

画像が圧縮されていないことに気づきました

リクエスト

GET http://localhost/MyWebApplication/Images/Logo_small.png HTTP/1.1
User-Agent: Fiddler
Host: localhost
Accept-Encoding: gzip, deflate

応答

HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: image/png
Last-Modified: Fri, 27 Nov 2015 03:15:22 GMT
Accept-Ranges: bytes
ETag: "c9d1fdd9c128d11:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Mon, 18 Jul 2016 15:33:02 GMT
Content-Length: 2970

...

そして、いくつかのgoogle-fuが、画像は通常すでに圧縮されていることを発見した後、gzipは適用されませんでした。

web.configからのFULL system.webServer

  <system.webServer>
    <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />
   <validation validateIntegratedModeConfiguration="false" />
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear />
      <error statusCode="404" responseMode="ExecuteURL" path="/NotFound" />
    </httpErrors>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <staticContent>
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
    </staticContent>
  </system.webServer>
1
Nkosi

IISとgzip構成で同様の状況があります

Firebugでは、リクエストヘッダーに次のエントリがあります:Accept-Encoding:gzip、deflate

ただし、次のようなものはありません。Content-Encoding:gzip応答ヘッダー。

私の場合、問題はアンチウイルス保護にありました。実際にはgzipが適用されましたが、アンチウイルス有効な設定でhttp接続を保護(具体的なプログラムによって異なります)、応答を解凍して確認し、その後、応答ヘッダーをその場で書き換えます。

[〜#〜] note [〜#〜]:プロキシ/アンチウイルスが応答ヘッダーを変更したときの重要な属性。それは消えたときですContent-LengthおよびTransfer-Encoding値が追加されますチャンク

0
RQman

私はちょうど同じ問題を抱えていました。原因はdynamicCompressionBeforeCache="true"設定でした。この属性を"false"に変更すると、問題が修正されました。

<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />

SmarterASP.Netが提供する共有サーバーでいくつかのサイトを実行しています。私は彼らと一緒にサポートチケットを発行し、その過程でdynamicCompressionBeforeCache="true"が犯人であると判断しました。

https://docs.Microsoft.com/en-us/iis/configuration/system.webserver/urlcompression で、この属性をカバーするMicrosoftのドキュメントを紹介し、なぜ設定するのかを尋ねました。 "true"がこの問題の原因になります。

SmarterASP.Netのサポートは、ドキュメントの次のセクションを参照しています...

出力キャッシュ応答がフラッシュされたときにdynamicCompressionBeforeCache属性がtrueの場合、応答が出力キャッシュに入れられる前に、動的圧縮は実行されません。

...そして彼らは言った...

「サーバー側に出力キャッシュを保存しません。そのため、出力キャッシュの応答が常にフラッシュされ、問題が発生しました。」

ここでの仕組みや、SmarterASP.Netが出力キャッシュを保存しない理由を完全に理解しているとは言えません。しかし、dynamicCompressionBeforeCache="false"の設定は、私にとって間違いなく問題を解決しました。

0
Tony Gray

事前構成されたIISで同様の問題が発生しました。

何度も試みた結果、問題はGZIPインストールのバグであることがわかりました。問題は、コントロールパネルに機能を再インストールするだけで解決しました。

0
Volpato