HTTP프로토콜에서 청크와 컨텐츠렝스의 차이(Content-Length VS Transfer-Encoding: chunked)
서버에서 클라이언트로 데이터를 전송해주는 방법은 두가지가 있습니다.
1) 모든것이 끝나면 전송(완성된 형태)
2) 불완성된 형태(처리하면서 그때 그때 보내줌)
위 두가지 방식에서 첫번째를 Content-Length 두번째를 Transfer-Encoding: chunked 헤더에 표시하여 보내줍니다.
첫번째 컨텐츠렝스에 해당하는 형태는 아래와 같습니다.
- 파일다운로드(이때 프로그래스바를 보여주려면 전체 사이즈를 알아야 합니다.)
- 정적인 HTML 파일
- 동적이지만 미리 만들어놓은 정적인 파일과 약간의 동적인 경우(빠르게 보여주기 위한것)
- js, css 파일(동적일 수 있지만 그런 경우는 흔하지 않을듯. 0.1% 이하)
- 이미지 파일들(이경우도 동적 처리가 있을 수 있지만 흔하지 않을듯)
- 압축된 데이터를 전송하고자 할때(js, css 등은 서버에서 자동 압축 하는 설정을 사용 하기도 합니다.)
- 경우에 따라 동적인 것도 전송양을 줄이기 위해 압축 하는 경우(이때는 처리가 끝나야 압축이 되는것을 감안하고 만들어야함)
두번째 청크 방식은
- 스트림 형태로 데이터를 보내주고자 할때
- 처리된 것을 바로바로 보내어 브라우저에서 일부라도 처리하게 하고플때(우리가 가장 흔하게 보는 방식)
제가 좀더 자세히 정리한것은 아래 링크를 참고하세요.
ChatGPT/PHP/Congent-Length vs Chunk at main · pabburi2/ChatGPT · GitHub