チャンク エンコーディング送信の 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 = トークン | quote-string
chunk-data = chunk-size(OCTET)
footer = *entity- header
RFC document の Chunked デコードプロセスは次のとおりです:
コードをコピー コードは次のとおりです:
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」を削除
最後にPHPを提供しますチャンク化されたデコード コードのバージョン:
コードをコピー コードは次のとおりです:
$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) )
while(!feof($socket_fd) && $chunk_size > 0) {
$bodyContent .= fread( $socket_fd, $chunk_size ); // rn をスキップ
$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096) ));
http://www.bkjia.com/PHPjc/319767.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/319767.html技術記事チャンク エンコーディング送信の HTTP 応答は、メッセージ ヘッダーに設定されます。 Transfer-Encoding: chunked は、コンテンツ本文がコンテンツの送信にチャンク エンコーディングを使用することを意味します。チャンクエンコードでは複数のチャンを使用します...