ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルにおける HTTP Response での Chunked エンコーディングの実装方法

PHP_PHP チュートリアルにおける HTTP Response での Chunked エンコーディングの実装方法

WBOY
WBOYオリジナル
2016-07-21 15:48:171340ブラウズ

チャンク エンコーディング送信の 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

http://www.bkjia.com/PHPjc/319767.html技術記事チャンク エンコーディング送信の HTTP 応答は、メッセージ ヘッダーに設定されます。 Transfer-Encoding: chunked は、コンテンツ本文がコンテンツの送信にチャンク エンコーディングを使用することを意味します。チャンクエンコードでは複数のチャンを使用します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。