チャンク エンコーディング送信の HTTP 応答は、メッセージ ヘッダーに設定されます。
Transfer-Encoding: chunked
コンテンツ本文がチャンク エンコーディングを使用してコンテンツを送信することを示します。
チャンクエンコーディングは、いくつかのチャンクを連結することによって形成され、長さ 0 を示すチャンクで終わります。各チャンクは、ヘッダーとテキストの 2 つの部分に分かれています。ヘッダーの内容は、テキストの次の段落の合計文字数 (16 進数) と数量単位 (通常は記述されません) を指定します。指定された長さの 2 つの部分をキャリッジ リターンとライン フィード (CRLF) で区切ります。長さ 0 の最後のチャンクのコンテンツはフッターと呼ばれ、追加のヘッダー情報です (通常は直接無視できます)。具体的なチャンクのエンコード形式は次のとおりです:
コードをコピーします コードは次のとおりです:
Chunked-Body = *chunk
「0」 CRLF
footer
CRLF
chunk = chunk-size [ chunk -ext ] CRLF
chunk -data CRLF
hex-no-zero =
chunk-size = hex-no-zero *HEX
chunk-ext = *( ";" chunk-ext; -name [ "=" chunk-ext-value ] )
chunk-ext-name = トークン
chunk-ext-val = トークン | 引用符で囲まれた文字列
chunk-data = chunk-size(OCTET)
footer = *entity- header
コードをコピー コードは次のとおりです:
length := 0
chunk-size、chunk-ext (存在する場合) を読み取り、 CRLF
while (chunk-size > 0) {
chunk-data と CRLF を読み取る
entity-body にチャンクデータを追加
length := length + chunk-size
chunk-size と CRLF を読み取る
}
entity-body を読み取るheader
while (entity-header not empty) {
既存のヘッダフィールドにentity-headerを追加
entity-headerを読み取る
}
Content-Length := length
Transfer-Encodingから「chunked」を削除
コードをコピー コードは次のとおりです:
$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) ) ); && $chunk_size > 0) {
$bodyContent .= fread( $socket_fd, $chunk_size ); // rn をスキップ
$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096) ));
上記は、PHP での HTTP Response での Chunked エンコーディングの実装方法を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。