청크 인코딩 전송에 대한 HTTP 응답은 메시지 헤더에 설정됩니다.
전송 인코딩: 청크
는 콘텐츠 본문이 청크 인코딩을 사용하여 콘텐츠를 전송한다는 의미입니다.
청크 인코딩은 여러 개의 청크를 연결하여 구성되며 길이가 0임을 나타내는 청크로 끝납니다. 각 청크는 헤더와 텍스트의 두 부분으로 나뉩니다. 헤더 내용은 텍스트의 다음 단락의 총 문자 수(16진수)와 수량 단위(일반적으로 작성되지 않음)를 지정합니다. 지정된 길이의 두 부분을 캐리지 리턴 및 줄 바꿈(CRLF)으로 구분합니다. 길이가 0인 마지막 청크의 콘텐츠를 바닥글이라고 하며 이는 추가 헤더 정보입니다(일반적으로 직접 무시할 수 있음). 구체적인 Chunk 인코딩 형식은 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
Chunked-Body = *chunk
"0 " CRLF
footer
CRLF
청크 = 청크 크기 [ 청크 확장 ] CRLF
청크 데이터 CRLF
hex-no-zero =
청크 크기 = 16진수 없음 *HEX
청크 확장 = *( ";" 청크 확장 이름 [ "=" 청크 확장 값 ] )
청크 -ext-name = 토큰
Chunk-ext-val = 토큰 | 인용 문자열
청크 데이터 = 청크 크기(OCTET)
바닥글 = *엔티티 헤더
코드 복사 코드는 다음과 같습니다.
길이 := 0
청크 크기 읽기, 청크 -ext(있는 경우) 및 CRLF
while (chunk-size > 0) {
청크 데이터 읽기 및 CRLF
청크 데이터를 엔터티 본문에 추가
길이 := 길이 청크 크기
청크 크기 및 CRLF 읽기
}
엔티티 헤더 읽기
while (엔티티 헤더가 비어 있지 않음) {
엔티티 헤더 추가 기존 헤더 필드
read 엔터티 헤더
}
Content-Length := length
Transfer-Encoding에서 "chunked" 제거
코드 복사 코드는 다음과 같습니다:
$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 ); // rn 건너뛰기
$chunk_size = ( 정수)hexdec(fgets( $socket_fd, 4096 ) )
}
위 내용은 관련 내용을 포함하여 PHP에서 HTTP 응답의 청크 인코딩 구현 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.