인프런 커뮤니티 질문&답변

김성민님의 프로필 이미지
김성민

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

전송 방식

분할전송 관련 질문

해결된 질문

작성

·

441

1

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요 강의 잘 듣고있습니다

분할전송에서 Content-Length를 제대로 파악할수가없어서 지정을 하면안된다고 하셨는데

아예 Content-Length를 지정할 방법이 없는걸까요?

ex) 난 3byte씩 10번 보낼래

이런식으로 말이죠

갑자기 궁금해져서 질문남겨봅니다

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김성민님

분할 전송 (Chunked Transfer Encoding)은 HTTP/1.1에서 도입된 방식으로, 이는 메시지 본문을 분할하여 전송하고, 각 분할된 부분에 길이 정보를 앞단에 추가하여 전송하는 방식입니다.

서버가 메시지 본문의 전체 길이를 미리 알지 못하는 경우나 동적으로 생성되는 컨텐츠를 전송할 때 유용하며, 이 때 HTTP 헤더의 "Transfer-Encoding: chunked"를 사용합니다. 이는 메시지 본문의 크기를 미리 알 필요가 없기 때문에 "Content-Length" 헤더를 사용하지 않습니다.

그러나 예를 들어 "3byte씩 10번 보낼래"와 같이 분할 전송을 할 때 각 분할의 크기와 전체 횟수를 미리 알고 있으며, 이를 클라이언트에 알리고 싶다면 어떻게 해야 할까요? 이 경우 "Content-Length"를 사용할 수 없으므로, 이러한 정보를 다른 방식으로 전달해야 합니다.

예를 들어, 서버가 각 분할마다 추가적인 메타데이터를 포함하여 보낼 수 있습니다. 이 메타데이터는 각 분할의 크기나 전체 분할 횟수 등의 정보를 담을 수 있습니다. 이렇게 하려면 서버와 클라이언트 모두 이 메타데이터를 파싱하고 이해할 수 있어야 합니다.

또 다른 방법으로는 커스텀 HTTP 헤더를 사용하는 것입니다. 이를 통해 서버는 클라이언트에게 전체 분할 횟수나 각 분할의 예상 크기 등의 정보를 미리 전달할 수 있습니다. 그러나 이 방법 역시 서버와 클라이언트 모두 이 커스텀 헤더를 이해하고 처리할 수 있어야 합니다.

단, 이러한 방법들은 모두 표준 HTTP 헤더를 벗어나는 해결책이므로, 구현에 있어서 추가적인 조정이나 협상이 필요할 수 있습니다. 그리고 이런 복잡성은 종종 실제 시나리오에서는 권장되지 않습니다. 가능한 한 HTTP의 표준적인 방식을 따르는 것이 일반적으로 좋습니다.

감사합니다.

김성민님의 프로필 이미지
김성민
질문자

자세하게 알려주셔서 감사합니다!!!

김성민님의 프로필 이미지
김성민

작성한 질문수

질문하기