Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web/HTTP/Headers/Transfer-Encoding を更新 #24125

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 25 additions & 22 deletions files/ja/web/http/headers/transfer-encoding/index.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
---
title: Transfer-Encoding
slug: Web/HTTP/Headers/Transfer-Encoding
l10n:
sourceCommit: 5bd9fe2b25c6eee2a14d0406ce7116998fa48c13
---

{{HTTPSidebar}}

**`Transfer-Encoding`** ヘッダーは、{{Glossary("Payload body","ペイロード本文")}}をユーザーに安全に転送するために使われる符号化方式を指定します
**`Transfer-Encoding`** ヘッダーは、ネットワーク上のノード間でメッセージを転送する際に使用するエンコード方式を指定します

> **メモ:** [HTTP/2](https://wikipedia.org/wiki/HTTP/2) は HTTP 1.1 のチャンク化した転送エンコードの仕組みに対応しておらず、新規にもっと効率的な、データストリーミングの仕組みを提供しています。
> [!WARNING]
> HTTP/2 では、Transfer-Encoding ヘッダーの使用は、HTTP/2 の特定の仕様である `"trailers"` 以外はすべて禁止されています。
> HTTP/2 以降では、チャンク転送よりも効率的なデータストリーミングの仕組みを自分自身で定義しており、このヘッダーの使用は禁止されています。
> HTTP/2 でこのヘッダーを使用すると、HTTP/2 プロトコルが使用を禁止しているため、特定のプロトコルエラーが発生する可能性が高いです。

`Transfer-Encoding` は[ホップバイホップヘッダー](/ja/docs/Web/HTTP/Headers#hbh)であり、リソース自体ではなく、二つのノード間のメッセージに適用されます。複数ノードコネクションのそれぞれの区間は、異なる `Transfer-Encoding` の値を使用することがあります。コネクション全体を通してデータを圧縮したい場合は、代わりにエンドトゥエンドの {{HTTPHeader("Content-Encoding")}} ヘッダーを使用してください。
`Transfer-Encoding` は[ホップバイホップヘッダー](/ja/docs/Web/HTTP/Headers#ホップバイホップヘッダー)であり、リソース自体ではなく、二つのノード間のメッセージに適用されます。
ノード間のコネクションが複数ある場合は、それぞれの区間で使用する `Transfer-Encoding` の値が異なることがあります。
コネクション全体を通してデータを圧縮したい場合は、代わりにエンドトゥエンドの {{HTTPHeader("Content-Encoding")}} ヘッダーを使用してください。

本文のない {{HTTPMethod("HEAD")}} リクエストに対するレスポンスで使われたときは、対応する {{HTTPMethod("GET")}} メッセージに適用されるであろう値を示します。

Expand All @@ -18,7 +25,7 @@ slug: Web/HTTP/Headers/Transfer-Encoding
<tr>
<th scope="row">ヘッダー種別</th>
<td>
{{Glossary("Response header", "レスポンスヘッダー")}}
{{Glossary("Request header", "リクエストヘッダー")}}, {{Glossary("Response header", "レスポンスヘッダー")}}, {{Glossary("Content header", "コンテンツヘッダー")}}
</td>
</tr>
<tr>
Expand All @@ -32,57 +39,53 @@ slug: Web/HTTP/Headers/Transfer-Encoding

## 構文

```
```http
Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip
Transfer-Encoding: identity

// コンマで区切って複数の値を並べることができます
// カンマで区切って複数の値を並べることができます
Transfer-Encoding: gzip, chunked
```

## ディレクティブ

- `chunked`
- : データはチャンク (塊) の連続で送られます。この場合は {{HTTPHeader("Content-Length")}} ヘッダーが省略されます。それぞれのチャンクの先頭に現在のチャンクの長さを 16 進数の形式で追加し、その後で '`\r\n`' が続き、チャンク自体ももう一つの '`\r\n`' が続きます。最後のチャンクは通常のチャンクですが、長さが 0 であるという点が異なります。この後に、一連のエンティティのヘッダーフィールド (おそらく空) から成るトレイラーが続きます。
- : データはチャンク(塊)の連続で送られます。この場合は {{HTTPHeader("Content-Length")}} ヘッダーが省略されます。それぞれのチャンクの先頭に現在のチャンクの長さを 16 進数の形式で追加し、その後で `\r\n` が続き、チャンク自体ももう一つの `\r\n` が続きます。
最後のチャンクは通常のチャンクですが、長さが 0 であるという点が異なります。この後に、一連のエンティティのヘッダーフィールド(おそらく空)から成るトレイラーが続きます。
- `compress`
- : [Lempel-Ziv-Welch](http://en.wikipedia.org/wiki/LZW) (LZW) アルゴリズムを使用した形式です。この値の名前はこのアルゴリズムを実装している UNIX の _compress_ プログラムから採られました。
特許問題 (2003 年に期限切れ) の影響もあり、多くの UNIX ディストリビューションから compress プログラムが消滅したように、今日ではこのコンテンツ符号化方式を使用しているブラウザーはほとんどありません。
- : [Lempel-Ziv-Welch](https://en.wikipedia.org/wiki/LZW) (LZW) アルゴリズムを使用した形式です。この値の名前はこのアルゴリズムを実装している UNIX の _compress_ プログラムから採られました。
特許問題2003 年に期限切れの影響もあり、多くの UNIX ディストリビューションから compress プログラムが消滅したように、今日ではこのコンテンツ符号化方式を使用しているブラウザーはほとんどありません。
- `deflate`
- : [zlib](http://en.wikipedia.org/wiki/Zlib) 構造体 ([RFC 1950](http://tools.ietf.org/html/rfc1950) で定義) と [_deflate_](http://en.wikipedia.org/wiki/DEFLATE) 圧縮アルゴリズム ([RFC 1951](http://tools.ietf.org/html/rfc1952) で定義) を使用します。
- : [zlib](https://en.wikipedia.org/wiki/Zlib) 構造体[RFC 1950](https://datatracker.ietf.org/doc/html/rfc1950) で定義と [_deflate_](https://en.wikipedia.org/wiki/DEFLATE) 圧縮アルゴリズム[RFC 1951](https://datatracker.ietf.org/doc/html/rfc1952) で定義を使用します。
- `gzip`
- : [Lempel-Ziv coding](http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77) (LZ77) と 32 ビット CRC を使用する形式です。これは元は UNIX の _gzip_ プログラムの形式です。 HTTP/1.1 標準は、互換性のために、このコンテンツ符号化方式の別名として`x-gzip` を解釈することにサーバーが対応することを推奨しています。
- `identity`
- : 恒等写像 (つまり、圧縮なし、変更なし) であることを示します。このトークンは、特に明示された場合は、常に受け付けられるとみなされます
- : [Lempel-Ziv coding](http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77) (LZ77) と 32 ビット CRC を使用する形式です。
これは元は UNIX の _gzip_ プログラムの形式です。
HTTP/1.1 標準は、互換性のために、このコンテンツ符号化方式の別名として`x-gzip` を解釈することにサーバーが対応することを推奨しています

## 例

### チャンク化の符号化

チャンク化の符号化は、大量のデータをクライアントに送り、リクエストが完了するまでレスポンスの合計の長さが分からない場合に便利です。例えば、巨大な HTML の表をデータベースのクエリの結果として作成したり、大きな画像を転送したりする場合などです。チャンク化されたレスポンスは以下のようになります。

```
```http
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
11\r\n
Developer Network\r\n
0\r\n
\r\n
```

## 仕様書

| 仕様書 | 題名 |
| --------------------------------------------- | ------------------------------------------------------------------ |
| {{RFC("7230", "Transfer-Encoding", "3.3.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing |
{{Specifications}}

## ブラウザーの互換性

Expand Down