title | slug | l10n | ||
---|---|---|---|---|
Transfer-Encoding |
Web/HTTP/Headers/Transfer-Encoding |
|
{{HTTPSidebar}}
Transfer-Encoding
ヘッダーは、ネットワーク上のノード間でメッセージを転送する際に使用するエンコード方式を指定します。
Warning
HTTP/2 では、Transfer-Encoding ヘッダーの使用は、HTTP/2 の特定の仕様である "trailers"
以外はすべて禁止されています。
HTTP/2 以降では、チャンク転送よりも効率的なデータストリーミングの仕組みを自分自身で定義しており、このヘッダーの使用は禁止されています。
HTTP/2 でこのヘッダーを使用すると、HTTP/2 プロトコルが使用を禁止しているため、特定のプロトコルエラーが発生する可能性が高いです。
Transfer-Encoding
はホップバイホップヘッダーであり、リソース自体ではなく、二つのノード間のメッセージに適用されます。
ノード間のコネクションが複数ある場合は、それぞれの区間で使用する Transfer-Encoding
の値が異なることがあります。
コネクション全体を通してデータを圧縮したい場合は、代わりにエンドトゥエンドの {{HTTPHeader("Content-Encoding")}} ヘッダーを使用してください。
本文のない {{HTTPMethod("HEAD")}} リクエストに対するレスポンスで使われたときは、対応する {{HTTPMethod("GET")}} メッセージに適用されるであろう値を示します。
ヘッダー種別 | {{Glossary("Request header", "リクエストヘッダー")}}, {{Glossary("Response header", "レスポンスヘッダー")}}, {{Glossary("Content header", "コンテンツヘッダー")}} |
---|---|
{{Glossary("Forbidden header name", "禁止ヘッダー名")}} | はい |
Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip
// カンマで区切って複数の値を並べることができます
Transfer-Encoding: gzip, chunked
chunked
- : データはチャンク(塊)の連続で送られます。この場合は {{HTTPHeader("Content-Length")}} ヘッダーが省略されます。それぞれのチャンクの先頭に現在のチャンクの長さを 16 進数の形式で追加し、その後で
\r\n
が続き、チャンク自体ももう一つの\r\n
が続きます。 最後のチャンクは通常のチャンクですが、長さが 0 であるという点が異なります。この後に、一連のエンティティのヘッダーフィールド(おそらく空)から成るトレイラーが続きます。
- : データはチャンク(塊)の連続で送られます。この場合は {{HTTPHeader("Content-Length")}} ヘッダーが省略されます。それぞれのチャンクの先頭に現在のチャンクの長さを 16 進数の形式で追加し、その後で
compress
- : Lempel-Ziv-Welch (LZW) アルゴリズムを使用した形式です。この値の名前はこのアルゴリズムを実装している UNIX の compress プログラムから採られました。 特許問題(2003 年に期限切れ)の影響もあり、多くの UNIX ディストリビューションから compress プログラムが消滅したように、今日ではこのコンテンツ符号化方式を使用しているブラウザーはほとんどありません。
deflate
gzip
- : Lempel-Ziv coding (LZ77) と 32 ビット CRC を使用する形式です。
これは元は UNIX の gzip プログラムの形式です。
HTTP/1.1 標準は、互換性のために、このコンテンツ符号化方式の別名として
x-gzip
を解釈することにサーバーが対応することを推奨しています。
- : Lempel-Ziv coding (LZ77) と 32 ビット CRC を使用する形式です。
これは元は UNIX の gzip プログラムの形式です。
HTTP/1.1 標準は、互換性のために、このコンテンツ符号化方式の別名として
チャンク化の符号化は、大量のデータをクライアントに送り、リクエストが完了するまでレスポンスの合計の長さが分からない場合に便利です。例えば、巨大な HTML の表をデータベースのクエリの結果として作成したり、大きな画像を転送したりする場合などです。チャンク化されたレスポンスは以下のようになります。
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
11\r\n
Developer Network\r\n
0\r\n
\r\n
{{Specifications}}
{{Compat}}
- {{HTTPHeader("Accept-Encoding")}}
- {{HTTPHeader("Content-Encoding")}}
- {{HTTPHeader("Content-Length")}}
- トレイラーの使用を制御するヘッダーフィールド: {{HTTPHeader("TE")}} (リクエスト) および {{HTTPHeader("Trailer")}} (レスポンス)
- チャンク化された転送エンコーディング