Home  >  Article  >  Backend Development  >  Implementation method of Chunked encoding in HTTP Response under PHP

Implementation method of Chunked encoding in HTTP Response under PHP

WBOY
WBOYOriginal
2016-07-29 08:39:161901browse

The HTTP Response for Chunked encoding transmission will be set in the message header:
Transfer-Encoding: chunked
Indicates 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: header and body. The header content specifies the total number of characters (hexadecimal numbers) and quantity unit (generally not written) of the next paragraph of text. The body 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 the 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 in 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 provide a PHP version of the chunked decoding code:

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 ) );
}

The above introduces the implementation method of Chunked encoding in HTTP Response under PHP, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
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