청크 인코딩(Chunked transfer encoding)이란?
전송 인코딩과 청크 인코딩
콘텐츠 인코딩은 메시지 본문(엔터티 본문)에 적용되는 콘텐츠의 포맷이라고 할 수 있다.
전송 인코딩 또한 엔터티 본문에 적용되는 변환이지만 콘텐츠의 포맷과는 독립적이다.
메시지 데이터가 네트워크를 통해 전송되는 방법을 바꾸기 위해 전송 인코딩을 메시지에 적용할 수 있다.
1. 콘텐츠 인코딩된 응답
HTTP/1.0 200 OK
Content-encoding: gzip
Content-type: text/html
[...]
[encoded message]
- 전송 인코딩된 응답
HTTP /1.1 200 OK
Transfer-encoding: chunked
10
abcdefghijk
1
a
콘텐츠 인코딩된 메시지는 단지 메시지의 엔터티 부분만 인코딩한다. 전송 인코딩된 메시지에서는, 인코딩은 전체 메시지에 대해 적용되어 메시지 자체의 구조를 바꾼다.
1. Transfer-Encoding 헤더
전송 인코딩을 제어하고 서술하기 위해 정의된 헤더는 단 두 개뿐이다.
Transfer-Encoding
안전한 전송을 위해 어떤 인코딩이 메시지에 적용되었는지 수신자에게 알려준다.
TE
어떤 확장된 전송 인코딩을 사용할 수 있는지 서버에게 알려주기 위해 요청 헤더에 사용한다.
ex)
1. REQUEST
GET /new_products.html HTTP/1.1
Host: http://www.joes-hardware.com
User-Agent: Mozilla/4.61 [en] (WinNT; I)
TE: trailers, chunked
...
2. RESPONSE
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Server: Apache/3.0
...
2. 청크 인코딩
청크 인코딩은 메시지를 일정 크기의 청크 여럿으로 쪼갠다. 서버는 각 청크를 순차적으로 보낸다.
청크 인코딩을 이용하면 메시지를 보내기 전에 전체 크기를 알 필요가 없어진다.
본문이 동적으로 생성됨에 따라, 서버는 그중 일부를 버퍼에 담은 뒤 그 한 청크를 그것의 크기와 함께 보낼 수 있다. 본문 전체를 모두 보낼 때까지 이 단계를 반복한다.
3. 청크와 지속 커넥션
지속 커넥션에서는, 본문을 쓰기 전에 반드시 Content-Length 헤더에 본문의 길이를 담아서 보내줘야 한다. 콘텐츠가 서버에서 동적으로 생성되는 경우에는, 보내기 전에 본문의 길이를 알아내는 것이 불가능할 것이다.
청크 인코딩은 서버가 본문을 여러 청크로 쪼개 보낼 수 있게 해줌으로써 이 딜레마에 대한 해법을 제공한다.
서버는 크기가 0인 청크로 본문이 끝났음을 알리고 다음 응답을 위해 커넥션을 열린 채로 유지할 수 있다.
응답 스트림은 아래 순서대로...
HTTP 응답
HTTP/1.1 200 OK<CR><LF>
Content-type: text/plain<CR><LF>
Transfer-encoding: chunked<CR><LF>
Trailer: Content-MD5<CR><LF>
<CR><LF>
청크 #1
27<CR><LF>
We hold these truths to be self-evident<CR><LF>
청크 #2
26<CR><LF>
, that all men are created equal, that<CR><LF>
청크 #3
84<CR><LF>
they are endowed by their Creator with certain
unalienable Rights, that among these are Life,
Liberty and the pursuit of Happiness.<CR><LF>
마지막 청크
0<CR><LF>
트레일러(메시지 헤더에 Trailer 헤더가 있을 때만 존재한다)
Content-MD5:gjqei54p26tjisgj3p4utjgrj53<CR><LF>
'법, 용어 > 용어' 카테고리의 다른 글
| ~함 ~임 개조식 (0) | 2025.08.27 |
|---|---|
| DB 대체 키(Alternate Key, AK) (0) | 2025.08.25 |
| checksum (0) | 2025.08.22 |
| [Spark] Apache Spark란? (0) | 2025.08.21 |
| [pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란? (0) | 2025.08.21 |