Content-Length
HTTPヘッダの項目だよ
渡すデータの長さ(サイズ)が入ってるよ
簡単に書くよ
Content-Length(読:コンテントレングス、コンテンツレングス)とは
ホームページのファイルを受け渡しするときのやり取り「このページをおくれ」「ほれ、そのページだよ」にくっつけて送られる「今おまえに渡しているデータは、これくらいの大きさだよ」な情報が書いてある項目
です。
詳しく書くよ
サクっと一言で説明すると
ホームページのやり取りをするときに出てくる「渡すデータの大きさ」が書いてある項目
が「Content-Length」です。
あなたがホームページを見ようとすると、まず、ホームページを見るときに使うソフト(Webブラウザ)からホームページのファイルが置いてあるコンピュータ(Webサーバ)に対して「このページをおくれ」と お願いが出されます。
そのお願いに対して、WebサーバさんからWebブラウザさんに「ほれ、そのページだよ」と お返事がきます。
お返事を受け取ったWebブラウザさんは、受け取ったページを画面上に表示します。
これが普通にホームページを見るときの流れです。
ここでWebブラウザさんがWebサーバさんに「このページをおくれ」と お願いを出したところに注目してください。
実は、このお願いには「今渡しているお願いデータは、これくらいの大きさだよ」という情報がくっついています。
この「今渡しているお願いデータは、これくらいの大きさだよ」という情報が書いてある項目がContent-Lengthです。
WebブラウザさんからWebサーバさんに出した「このページをおくれ」な お願いを専門用語で「HTTPリクエスト」と言います。
HTTPリクエストは3つの部品から成り立っています。
1.HTTPリクエストライン(リクエストライン)
2.HTTPリクエストヘッダ(ヘッダ)
3.HTTPリクエストメッセージボディ(メッセージボディ)
の3つです。
構造としては
「リクエストライン」
「ヘッダ」
(空行【CR+LF】)
「メッセージボディ」
のようになっています。
この3つのうち「HTTPリクエストヘッダ(ヘッダ)」の中に「Content-Length」という項目があるのです。
Content-Lengthの項目にはメッセージボディの大きさが書いてあります。
……と言葉で説明されても分かりにくいと思いますので、実際のHTTPリクエストを見てみましょう。
実際のHTTPリクエストは、例えば以下のような内容になっています。
POST /search.html HTTP/1.1\r\n
Host: wa3.i-3-i.info\r\n
Connection: keep-alive\r\n
Content-Length: 38\r\n
Cache-Control: max-age=0\r\n
Origin: http://wa3.i-3-i.info\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: うんちゃら\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Referer: http://wa3.i-3-i.info/index.html\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ja,en-US;q=0.8,en;q=0.6\r\n
\r\n
q=test&submitSearch=%E6%A4%9C%E7%B4%A2
ごちゃごちゃしていて分かりにくいですが、1行目の
POST /search.html HTTP/1.1\r\n
の部分がリクエストラインです。
Host: wa3.i-3-i.info\r\n
Connection: keep-alive\r\n
Content-Length: 38\r\n
Cache-Control: max-age=0\r\n
Origin: http://wa3.i-3-i.info\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: うんちゃら\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Referer: http://wa3.i-3-i.info/index.html\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ja,en-US;q=0.8,en;q=0.6\r\n
の部分がヘッダです。
q=test&submitSearch=%E6%A4%9C%E7%B4%A2
の部分がメッセージボディになります。
ヘッダの中に
Content-Length: 38\r\n
と書いてありますよね。
これが、Content-Lengthです。
「38」という数字はメッセージボディの大きさを示しています。
数えると分かりますが、メッセージボディの中身
q=test&submitSearch=%E6%A4%9C%E7%B4%A2
はアルファベット38文字です。
つまり、38バイトです。
Content-Lengthにはメッセージボディのサイズが書いてあります。
これでContent-Lengthについて何となく分かったと思いますが、せっかくなので、Webサーバさんからの返事の方にも触れておきましょう。
WebサーバさんがWebブラウザさんに「ほれ、そのページだよ」と お返事を出したところに注目してください。
実は、このお返事にも「今渡しているお返事データは、これくらいの大きさだよ」という情報がくっついています。
この「今渡しているお返事データは、これくらいの大きさだよ」という情報が書いてある項目がContent-Lengthです。
WebサーバさんからWebブラウザさんに出した「ほれ、そのページだよ」なお返事を専門用語で「HTTPレスポンス」と言います。
HTTPレスポンスは3つの部品から成り立っています。
1.HTTPステータスライン(ステータスライン)
2.HTTPレスポンスヘッダ(ヘッダ)
3.HTTPレスポンスボディ(レスポンスボディ)
の3つです。
構造としては
「ステータスライン」
「ヘッダ」
(空行【CR+LF】)
「レスポンスボディ」
のようになっています。
この3つのうち「HTTPレスポンスヘッダ(ヘッダ)」の中に「Content-Length」という項目があるのです。
Content-Lengthの項目にはレスポンスボディの大きさが書いてあります。
それでは次に実際のHTTPレスポンスを見てみましょう。
……と思ったのですが、HTTPリクエストのときと似たようなものなので止めておきます。
ちなみにContent-Lengthは絶対についているとは限りません。
ご注意ください。
「あれ?Content-Lengthがついてないよ?」となることもあるでしょう。
送る方が「Content-Lengthをつけて送るよ!」としないと、ついていなかったりします。
一言でまとめるよ
まぁ「Content-Length」って単語が出てきたら「送るデータのサイズが書いてある項目なんだな~」と お考えください。
おまけ
■訳してみるよ
「content(コンテント)」の意味は「中身」とか「内容物」とかです。
「length(レングス)」の意味は「長さ」とかです。
何となく くっつけると
中身の長さ
となります。






