HTTPヘッダーの「Content-Length」フィールドとは何ですか?


282

どういう意味ですか?

  1. ヘッダーにエンコードが指定されたエンコード済みコンテンツ文字列のバイト数。
  2. コンテンツ文字列の文字数。

特にの場合Content-Type: application/x-www-form-urlencoded

回答:


239

rfc2616

Content-Lengthエンティティヘッダーフィールドは、10進数の10進数で、受信者に送信されたエンティティボディのサイズを示します。または、HEADメソッドの場合、送信されたエンティティボディのサイズを示します。リクエストはGETでした。

content-typeが何であるかは関係ありません。

以下のポストでの拡張。


14
この回答とトムカバンスキーの回答を組み合わせると、必要な情報がすべて揃います。テキストの場合、ASCIIは8ビットなので、文字数を数えることができます。
hcpl 2012

9
@hcpl:しかし、テキストは必ずしも常にASCIIではない、また、ASCIIは7ビットではなく8である
リー・ライアン

2
ASCIIを使用しているエンコーディングに置き換え、エンコーディングに必要なビット数を調べます。7対8ビット応答の場合。もともとそれは確かに7ビットだったので、あなたは再び正しいです。しかし、今日ではほとんどの場合(すべてではないにしても)に8ビットが使用されています。これは、コンピューターのメモリの構成方法によります。編集:私の答えを再読します。私は元のコメントを言い換える必要があります。
hcpl 2013年

6
@hcpl:バイトと文字の問題が重大である理由は、「ビット数」が固定されていないUTF-8やUTF-16などの可変幅エンコーディングが原因です。
StefanKarpinski 2014年

2
この番号を偽造できますか?巨大な長さの文字列パラメータをPOSTするが、content-lengthを1に設定するようなものですか?
Shih-Min Lee

260

これは、リクエストまたはレスポンスの本文のデータのバイト数です。本文は、ヘッダーの下の空白行の後に来る部分です。


1
「リクエストやレスポンス」ではなく、「レスポンスの本文」だけではないですか?リクエストのヘッダーとデータの間に空白行がありません。
ajfbiw.s

私は、Javaフィルタに出願されたHTTP応答ヘッダーのコンテンツの長さを変更することができる
KItis

2
@ ajfbiw.s http postリクエストを検討してください。「リクエスト内のメッセージ本文の存在は、リクエストのメッセージヘッダーにContent-LengthまたはTransfer-Encodingヘッダーフィールドが含まれていることで示されます。」from w3.org/Protocols/rfc2616/rfc2616-sec4.html# sec4.3
Roy Guanyu 2016年

68

Content-Lengthヘッダは、HTTPボディの正確なバイトの長さを表す数値です。HTTP本文は、開始行とヘッダーの後にある最初の空行の直後から始まります。

一般的にContent-LengthヘッダがHTTP 1.1のために使用されているので、受信側当事者は、現在の応答が時に知っている*ので、終了した接続は、別の要求のために再利用することができます

* ...またはPOST、PUT、PATCHなどのボディを持つリクエストメソッドの場合はリクエスト

または、Content-Lengthヘッダーを省略してチャンクTransfer-Encodingヘッダーを使用することもできます。

Content-LengthTransfer-Encodingヘッダーの両方が欠落している場合は、応答の最後に接続を閉じる必要があります。

次のリソースは、HTTPについて学ぶときに非常に役立つガイドです。

HTTPは本当に簡単になりました


45

1オクテットは8ビットです。Content-lengthは、メッセージ本文が表すオクテットの数です。


37
オクテット=別名バイト?
ViniciusPires 2014

77
@ViniciusPires 'byte'は、アドレス可能なメモリの最小単位を表すために一般的に使用されます。これは、すべてのアーキテクチャで必ずしも8ビットであるとは限りません。そのため、あいまいさを避けるために「オクテット」が使用されます
PJK

6
@PJK、いや、正確ではありません。OCTETここには、<データの任意の8ビットシーケンス>を意味する非常に特定の意味があります。w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

ここから

Content-Lengthエンティティヘッダーフィールドは、10進数の10進数で、受信者に送信されたエンティティボディのサイズを示します。または、HEADメソッドの場合、送信されたエンティティボディのサイズを示します。リクエストはGETでした。

   Content-Length    = "Content-Length" ":" 1*DIGIT

例は

   Content-Length: 3495

セクション4.4のルールで禁止されていない限り、アプリケーションはこのフィールドを使用してメッセージ本文の転送長を示す必要があります。

ゼロ以上のContent-Lengthは有効な値です。セクション4.4では、Content-Lengthが指定されていない場合にメッセージ本文の長さを決定する方法について説明します。

このフィールドの意味は、MIMEの対応する定義とは大きく異なります。MIMEでは、「message / external-body」コンテンツタイプ内で使用されるオプションのフィールドです。HTTPでは、セクション4.4のルールで禁止されていない限り、転送前にメッセージの長さを決定できる場合は常に送信する必要があります。

私の解釈では、これは「回線上」の長さ、つまり*エンコードされたコンテンツの長さを意味します


7
「オンザワイヤー」の場合、圧縮によって長さが変わりますが、圧縮前の長さを言うのは正しいです。
BayssMekanique 2013年

Content-LengthはMac / Linuxのようなマシンのタイプによって異なりますか?または、curl / postmanのような別のクライアントを使用している間、それは異なりますか?
Kanagavelu Sugumar 2017

1
他のすべてが等しいままであると仮定すると(たとえば、エンコード、圧縮など)、コンテンツの長さはプラットフォームに依存しません。これはサーバーからのヘッダーであるため、ユーザーエージェントを盗聴したり、動作を変えたりしないと仮定すると、クライアントは何も違いを生じさせるべきではありません。
ダニエルレンショー2017

Typescriptはこれでエラーをスローします。タイプ 'number'はタイプ 'string |に割り当てることができません| string [] 'したがって、例は次のようになります"Content-length": "3495"
A. D'Alfonso

8

このページから

POSTの最も一般的な使用法は、HTMLフォームデータをCGIスクリプトに送信することです。この場合、Content-Type:ヘッダーは通常application / x-www-form-urlencodedであり、Content-Length:ヘッダーはURLエンコードされたフォームデータの長さを示します(ここにURLエンコードに関する注意があります)。CGIスクリプトは、STDINを介してメッセージ本文を受信し、デコードします。POSTを使用した一般的なフォーム送信は次のとおりです。

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

5

仕様によると:

Content-Lengthエンティティヘッダーフィールドは、10進数の10進数で、受信者に送信されたエンティティボディのサイズを示します。または、HEADメソッドの場合、送信されたエンティティボディのサイズを示します。リクエストはGETでした。

Content-Length    = "Content-Length" ":" 1*DIGIT

例は

Content-Length: 3495

アプリケーションは、セクション4.4のルールで禁止されていない限り、メッセージ本文の転送長を示すためにこのフィールドを使用する必要があります(SHOULD)。

ゼロ以上のContent-Lengthは有効な値です。セクション4.4では、Content-Lengthが指定されていない場合にメッセージ本文の長さを決定する方法について説明します。

このフィールドの意味は、MIMEの対応する定義とは大きく異なります。MIMEでは、「message / external-body」コンテンツタイプ内で使用されるオプションのフィールドです。HTTPでは、セクション4.4のルールで禁止されていない限り、転送前にメッセージの長さを決定できる場合は常に送信する必要があります。


2

Content-Lengthエンティティヘッダーフィールドは、10進数の10進数で、受信者に送信されたエンティティボディのサイズを示します。または、HEADメソッドの場合、送信されたエンティティボディのサイズを示します。リクエストはGETでした。

Content-Length = "Content-Length" ":" 1 * DIGIT

例は

コンテンツの長さ:1024

アプリケーションは、このフィールドを使用して、メッセージ本文の転送長を示す必要があります(SHOULD)。

PHPでは、次のようなものを使用します。

header("Content-Length: ".filesize($filename));

「Content-Type:application / x-www-form-urlencoded」の場合、エンコードされたデータは指定された処理エージェントに送信されるため、投稿するデータの長さまたはサイズを設定できます。


0

次のようなヘッダーがあるかどうかを検討してください。

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

コンテンツ長のサイズであり、圧縮(すべての現代のコンピュータは、「バイト」であることが起こる8ビット単位のIE)「オクテット」で、メッセージ本文。

実際のメッセージ本文のサイズは、他の可能性があり、おそらく150280バイトです。

多くの文字は、いくつかのUnicode文字が複数のバイトを(注UTF-8は、標準エンコーディングである)を使用するので、おそらく、再び150231文字異なっていてもよいです。

したがって、送信されるデータの量、保持されるデータの量、または表示されるシンボルの数を気にするかどうかによって、異なる数値になります。もちろん、これらのヘッダーが提供される保証はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.