web-dev-qa-db-ja.com

リクエストにViaヘッダーを含めると、IIS6がgzip圧縮を実行しない

CDNを通過する静的コンテンツがいくつかあります。静的コンテンツにIIS6の組み込み圧縮(gzipとdeflate)を使用していますが、リクエストすると正常に機能します。ただし、CDNがコンテンツの最初の要求を行うとき、コンテンツは圧縮されて返されません。したがって、それを要求する人々に転送するための圧縮されたコンテンツはありません。 (はい、これにより、圧縮を処理できないブラウザーでCDNに[zip形式の]コンテンツを要求する人々の問題が発生します。ただし、ここではそれを片側に置きます。)

'Via'ヘッダーなしでリクエストする例を次に示します。

HEAD /flash/swfobject.js HTTP/1.1  
User-Agent: curl/7.19.7 (i386-pc-win32)  
Host: localhost:9120  
Accept: */*  
Connection: Keep-Alive  
accept-encoding: gzip  

そして、圧縮された応答を返します。

HTTP/1.1 200 OK
Content-Length: 4357
Content-Type: application/x-javascript
Content-Encoding: gzip
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:52 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:27:50 GMT

ただし、(CDNのように)リクエストに「Via」ヘッダーを含めると、結果は圧縮されずに返されます。

リクエスト:

HEAD /flash/swfobject.js HTTP/1.1
User-Agent: curl/7.19.7 (i386-pc-win32)
Host: localhost:9120
Accept: */*
Connection: Keep-Alive
Via: 1.1 204.160.105.17:80 (Footprint 4.5/FPMCP)
accept-encoding: gzip

応答:

HTTP/1.1 200 OK
Content-Length: 14602
Content-Type: application/x-javascript
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:54 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:29:52 GMT

はい、これらのデモはリクエストで「localhost」を使用します。ただし、さまざまなネットワーク上のさまざまなマシンから実際のドメイン名を使用しても同じ結果が得られます。

次に、2つの質問:

  1. これはIIS余分なヘッダーが原因で圧縮を適用していない可能性がありますか?その場合、どうすればよいですか?

  2. プロキシがコンテンツを返す前に解凍しているかどうかを確認するにはどうすればよいですか?

ボーナス質問:

  1. この問題をさらに調査するにはどうすればよいですか?

SO質問332049 を認識していますが、要求ではなく応答にヘッダーがあります。

2
Matt Lacey

パーティーに少し遅れましたが、同様の問題を調査しているときにこれに遭遇したので、私は参加することにしました。

IIS6は、アップストリームプロキシを介してサーバーに到着する要求にHTTP圧縮を適用しません。 HTTP 1.1仕様では、プロキシサーバーが「Via:」ヘッダーを追加する必要があると指定されているため、これは、直接トラフィックとプロキシトラフィックを区別するためにIISが使用するものでなければなりません。

必要に応じて有効にすることができますが、最初にテストすることをお勧めします。このデフォルトの動作の主張されている理由は、ほとんどのプロキシが圧縮されたコンテンツをうまく処理できないためです。

参照:

TechNet:HcNoCompressionForProxiesメタベースプロパティ(IIS 6.0)

HTTP/1.1ヘッダーフィールド経由

1
ThatGraemeGuy