やるかどうかというと、現在の状況はどうですか?
Transfer-Encoding: gzip
または
Content-Encoding: gzip
たとえば、帯域幅が制限されているクライアントが、圧縮された応答を受け入れる意思があることを通知し、サーバーが圧縮するかどうかを最終的に決定できるようにしたい場合。
後者は、たとえば Apache の mod_deflate と IIS が圧縮を処理する場合に行うことです。圧縮するコンテンツのサイズに応じて、追加のTransfer-Encoding: chunked
.
Vary: Accept-Encoding
また、すでに問題を示唆しているも含まれます。Content-Encoding
エンティティの一部であるように見えるため、Content-Encoding
金額をエンティティの変更に変更すると、つまり、Accept-Encoding
ヘッダーが異なると、たとえば、キャッシュは、それ以外の場合は同一のエンティティのキャッシュされたバージョンを使用できなくなります。
私が見逃した明確な答えはありますか(そして、それはいくつかのApacheニュースグループの長いスレッドのメッセージ内に埋もれていません)?
私の現在の印象は次のとおりです。
- 実際、Transfer-Encoding は、既存のサーバーとクライアントの実装によって Content-Encoding でほとんど行われていることを行う正しい方法です。
ETag
Content-Encoding は、そのセマンティックな意味合いのために、いくつかの問題を抱えています (サーバーが応答を透過的に圧縮する場合、サーバーは何をすべきでしょうか?)- その理由はニワトリと卵です: サーバーがサポートしていないため、ブラウザーがサポートしていないため、ブラウザーがサポートしていません。
したがって、正しい方法は a になると想定していますTransfer-Encoding: gzip
(または、さらに体をチャンクすると、 になり Transfer-Encoding: gzip, chunked
ます)。Vary
そして、それはトランスポートレベルのものであるため、その場合、またはETag
他のヘッダーに触れる理由はありません。
今のところ、私は の「ホップバイホップ」性についてはあまり気にしていません。これはTransfer-Encoding
、プロキシが圧縮解除され、圧縮解除された状態でクライアントに転送される可能性があるためです。ただし、元のリクエストに適切なAccept-Encoding
ヘッダーが含まれている場合、プロキシはそれをそのまま(圧縮して)転送することもできます。これは、私が知っているすべてのブラウザーの場合です。
ところで、この問題は少なくとも 10 年前のものです。たとえば https://bugzilla.mozilla.org/show_bug.cgi?id=68517を参照してください。
これに関する説明をいただければ幸いです。標準に準拠していると見なされるものと、実用的であると見なされるものの両方の観点から。たとえば、透過的な「Content-Encoding」のみをサポートする HTTP クライアント ライブラリは、実用性に反する議論になります。