情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

サーバサイドウェブ開発基礎 HTTP詳説 トランスファーコーディング

トランスファーコーディングについて解説します。

トランスファーコーディング

HTTPリクエストやHTTPレスポンスのボディは様々な方法で送信することができます。この方法をトランスファーコーディングと言います。トランスファーコーディングは1つのボディに複数個使用することができます。

トランスファーコーディングには下のようなものがあります。

  • chunked
  • compress
  • deflate
  • gzip

トランスファーコーディングの大文字と小文字は区別されませんが、小文字のみを使用するべきであり、大文字は使用するべきではありません。

また、chunkedトランスファーコーディングは全てのクライアントとサーバがサポートしなければなりません。その他のトランスファーコーディングに関してはサポートしなくても構いません。

サーバがサポートしていないトランスファーコーディングを使用したボディを含むHTTPリクエストを受け取った場合にはステータスコードが501Not Implemented)のHTTPレスポンスを返信するようにします。

また、chunkedトランスファーコーディング以外のトランスファーコーディングを使用する場合には最後のトランスファーコーディングとしてchunkedトランスファーコーディングを使用するべきです。

chunkedトランスファーコーディング

chunkedトランスファーコーディングはボディを一気にではなく徐々に送信することを可能にします

これにより、事前にサイズが分かっていないデータをボディとして徐々に送信することができます。

また、chunkedトランスファーコーディングはボディを送信し終わった後に追加でヘッダフィールドを送信することを可能にします

これにより、ボディを送信した後でなければ値の内容が決まらないようなヘッダフィールドを送信することができます。ただし、逆に、ボディを送信する前に送信しなければ意味のないヘッダフィールドを送信することはできません。

ボディを徐々に送信する場合には1回の送信を行う毎にその時に送信するデータのサイズをバイト単位の16進数として送信し、改行を送信し、データを送信し、改行を送信します。

ボディを送信し終わった場合には0を送信し、改行を送信します。

更にこの後にヘッダフィールドを送信することができます。

そして、最後に改行を送信します。

改行はキャリッジリターンとラインフィードで行います(キャリッジリターンとラインフィードを順番に続けることによって行います)。

なお、chunkedトランスファーコーディングは必ず最後のトランスファーコーディングとして使用しなければなりません。また、1つのボディに複数回chunkedトランスファーコーディングを適用することはできません

compressトランスファーコーディング

compressトランスファーコーディングはボディを圧縮方式の1つであるLZWコーディングで送信することを可能にします。

deflateトランスファーコーディング

deflateトランスファーコーディングはボディをデフレート圧縮して送信することを可能にします。

gzipトランスファーコーディング

gzipトランスファーコーディングはボディをGzip圧縮して送信することを可能にします。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-http, web