IIS を使用して静的ファイルを提供しています。静的圧縮と動的圧縮の両方を有効にするように (GUI を使用して) IIS を構成しました。
HttpClient
次のように、ダウンロードに使用しています。
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
request.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
var response = client.SendAsync(request).Result;
var stream = new FileStream("foo", FileMode.Create);
response.Content.CopyToAsync(stream)
.ContinueWith(t => stream.Close())
.Wait();
Fiddler を使用してトラフィックを検査していますが、最初の 1 つまたは 2 つの応答が圧縮されていないことがわかります。IIS がバックグラウンドでファイルを圧縮し、どこかにキャッシュしていると思います。ディスクに書き込まれるファイルは約 14MB (予想) です。
後のリクエストは圧縮されます。応答にヘッダーが表示Content-Encoding: gzip
され、ダウンロードされるファイルは約 360KB です。gzip
Cygwin のfile
コマンドで識別されるファイルです。
ただし、gzip -d
解凍に使用すると、660KB のファイルになり、それ自体が gzip で圧縮されたファイルであり、file
.
そのファイルを解凍すると、期待していた 14 MB のファイルが返されます。
では、ファイルが 2 回圧縮されるのはなぜですか?