[解決済み] Transfer-Encoding: gzip vs. Content-Encoding: gzip
質問
を行うかどうかの現状はどうなっているのでしょうか?
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 でほとんど行われていることを行うための正しい方法でしょう。
-
Content-Encoding は、そのセマンティックな意味合いから、いくつかの問題を含んでいます。
ETag
に対して何をすべきなのでしょうか?) - 理由は鶏と卵です: ブラウザがサポートしていないため、サーバーがサポートしていないため、ブラウザがサポートしていないためです。
というわけで、私は正しい方法は
Transfer-Encoding: gzip
(である(あるいは、ボディを追加でチャンクすると、それは
は
Transfer-Encoding: gzip, chunked
). そして
Vary
または
ETag
などのヘッダは、トランスポートレベルのものです。
今のところ、私は「ホップバイホップ」であることをあまり気にしていません。
Transfer-Encoding
の「ホップ バイ ホップ」については、プロキシは圧縮を解除してクライアントに転送するかもしれないので、他の人がまず第一に気にするようなことではありません。しかし、プロキシはそのまま (圧縮されたまま) 転送してもかまいませんし、もしオリジナルのリクエストに適切な
Accept-Encoding
ヘッダーがある場合、プロキシはそのまま (圧縮されたまま) 転送します。
この問題は少なくとも 10 年以上前のもので、たとえば次のようなものがあります。 https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
これに関するどんな明確な説明も感謝されます。何が標準準拠とみなされるか、そして何が実用的とみなされるかという点で、両方です。たとえば、HTTP クライアント ライブラリが透過的な "Content-Encoding" をサポートするだけでは、実用性に反する議論になります。
どのように解決するのですか?
引用元 ロイ・T・フィールディング RFC2616の著者の一人である。
content-encoding を一貫性のない方法でその場で変更することは ("never" or "always のどちらでもない)そのコンテンツに関する後の要求が不可能になります。 そのコンテンツに関する後のリクエスト (例: PUT や条件付き GET) を正しく処理することができなくなります。 を正しく処理することができなくなります。 もちろん、これがオンザフライの を実行するのが馬鹿げている理由であり、 正しい方法として HTTP に Transfer-Encoding を追加した理由でもあります。 を HTTP に追加したのは、リソースを変更せずにその場でエンコードするための適切な方法だからです。 を追加した理由です。
ソースは https://issues.apache.org/bugzilla/show_bug.cgi?id=39727#c31
つまりは をしないことです。 オンザフライ Content-Encoding を行わず、代わりに Transfer-Encoding を使ってください!
編集してください。 ということです。 を理解するクライアントにgzip形式のコンテンツを提供したい場合は別ですが、そうでない場合は、このようになります。 . これは、残念ながら、それらのほとんどであるように思われる。しかし、あなたは 仕様の領域から離れる で、Fielding が言及したような問題や、他の問題、たとえばキャッシュプロクシが関与している場合などに遭遇する可能性があることに注意してください。
関連
-
[解決済み] プロキシが全く応答を受け取らない場合、502 HTTPステータスコードを使用すべきですか?
-
[解決済み] X-Forwarded-Forヘッダーが表示されないブラウザの理由
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】zlib、gzip、zipはどのように関係していますか?これらの共通点と相違点は何ですか?
-
[解決済み】BASIC認証でWebサイトからユーザーをログアウトさせる方法は?
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】Node.jsのほとんどのポートでリスニングするとEACCESエラーが発生する。
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み】HTTP1.1とHTTP2.0の違いは何ですか?[クローズド]
-
[解決済み] PragmaヘッダーとCache-Controlヘッダーの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 0.0.0.0:80」と「:80」でのリスニングの違いは何ですか?
-
[解決済み] プロキシが全く応答を受け取らない場合、502 HTTPステータスコードを使用すべきですか?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み] ブラウザのCookieドメインはどのように機能するのですか?
-
[解決済み] HTTPリダイレクト:301(永久)と302(一時)の比較
-
[解決済み] Firefoxで突然「Blocked loading mixed active content」問題が発生したのはなぜですか?
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?
-
[解決済み] HTTPヘッダーの設定