Implementation method of Chunked encoding in HTTP Response under PHP_PHP tutorial

WBOY
Release: 2016-07-21 15:48:17
Original
1358 people have browsed it

The HTTP Response for Chunked encoding transmission will be set in the message header:
Transfer-Encoding: chunked
means that the Content Body will use Chunked encoding to transmit the content.
Chunked encoding is formed by concatenating several Chunks and ends with a chunk indicating a length of 0. Each Chunk is divided into two parts: the header and the text. The header content specifies the total number of characters (hexadecimal numbers) and the quantity unit (generally not written) of the next paragraph of text. The text part is the actual content of the specified length. The two parts Separate them with carriage return and line feed (CRLF). The content in the last Chunk of length 0 is called footer, which is some additional Header information (usually can be ignored directly). The specific Chunk encoding format is as follows:

Copy code The code is as follows:

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 = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
footer = *entity-header

RFC document The Chunked decoding process is as follows:
Copy code The code is as follows:

length := 0
read chunk-size, chunk -ext (if any) and CRLF
while (chunk-size > 0) {
read chunk-data and CRLF
append chunk-data to entity-body
length := length + chunk -size
read chunk-size and CRLF
}
read entity-header
while (entity-header not empty) {
append entity-header to existing header fields
read entity -header
 }
Content-Length := length
Remove "chunked" from Transfer-Encoding

Finally, a PHP version of the chunked decoding code is provided:
Copy code The code is as follows:

$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) );
while(! feof($socket_fd) && $chunk_size > 0) {
$bodyContent .= fread( $socket_fd, $chunk_size );
fread( $socket_fd, 2 ); // skip rn
$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) );
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/319767.htmlTechArticleThe HTTP Response for Chunked encoding transmission will be set in the message header: Transfer-Encoding: chunked means that the Content Body will use Chunked encoding transfer content. Chunked encoding uses several Chun...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!