ホームページ  >  記事  >  ウェブフロントエンド  >  Http プロトコル_html/css_WEB-ITnose の Content-Length の解釈

Http プロトコル_html/css_WEB-ITnose の Content-Length の解釈

WBOY
WBOYオリジナル
2016-06-24 11:26:002144ブラウズ

HTTP プロトコルには、Content-Length の詳細な説明があります。 Content-Length は、HTTP メッセージ エンティティのメッセージ本文の転送長を記述するために使用されます。 HTTP プロトコルでは、メッセージ エンティティの長さとメッセージ エンティティの送信長には違いがあります。たとえば、gzip 圧縮では、メッセージ エンティティの長さは圧縮前の長さであり、メッセージ エンティティの送信長は圧縮後の長さになります。 gzip圧縮後の長さ。

特定の HTTP インタラクションにおいて、クライアントがメッセージ長を取得する方法は主に次のルールに基づいています:

応答が 1xx、204、304 またはヘッドリクエストの場合、メッセージエンティティの内容は直接無視されます。

Transfer-Encoding がある場合、最初に Transfer-Encoding のメソッドが使用され、対応する長さが検索されます。たとえば、チャンクモード。

「先頭にContent-Lengthがある場合、このContent-Lengthはエンティティ長と転送長の両方を表します。エンティティ長と転送長が等しくない場合(例えば、Transfer-Encodingが設定されている場合)、 Content-Length を長さに設定することはできません。Transfer-Encoding が設定されている場合、Content-Length は無視されます。」この文を翻訳する利点は実際に重要です。Transfer-Encoding では、Content-Length は存在できません。

範囲送信。フォローしないでください、詳しく読んでいません:)

メッセージの送信長は、サーバー経由の接続を閉じることで決定できます。 (リクエスタは、接続を閉じることでリクエスト メッセージ本文の終わりを示すことはできません。これは、サーバーが応答を続ける機会を拒否することになるためです)。この状況は主に短い接続、つまり非キープアライブ モードに対応します。

HTTP1.1はチャンクモードをサポートする必要があります。メッセージの長さが不確実な場合、チャンク メカニズムを使用してこの状況に対処できるためです。

メッセージの内容を含むヘッダーに content-length フィールドがある場合、このフィールドに対応する値はメッセージの件名の長さと完全に一致する必要があります。

「メッセージのエンティティ長は、転送コーディングが適用される前のメッセージ本文の長さです。」

つまり、チャンクが存在する場合、コンテンツ長は存在できません。

実際、次のいくつかの項目はほとんど無視できます。簡単にまとめると次のとおりです:

1. Content-Length が存在し、有効である場合、メッセージコンテンツの送信長と完全に一致する必要があります。 (テスト後、短すぎる場合は切り詰められ、長すぎる場合はタイムアウトが発生します。)

2. Transfer-Encodingがある(フォーカスがチャンクされている)場合、Contentはありません。 -ヘッダーの長さ。無視されます。

3. 短い接続が使用されている場合、メッセージの送信長は、サーバーを介して接続を閉じることによって直接決定できます。 (これはわかりやすいです)

HTTPプロトコルの他の機能と組み合わせると、例えば以前のHTTP1.1はキープアライブをサポートしていません。そして、次の結論を導き出すことができます:

1. HTTP 1.0 以前のバージョンでは、content-length フィールドは不要です。

2. http1.1 以降のバージョン。キープアライブの場合、content-length と chunk は 2 つのうちのいずれかである必要があります。キープアライブしない場合はhttp1.0と同じです。 content-length はオプションです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。