논리적 사고

AI가 HTTP Content-Length를 글자 수로 적어도 될까?

영문·한글·이모지 본문을 바꾸어 글자 수와 UTF-8 바이트 수를 비교하고, Content-Length에 들어갈 값을 검산합니다.

한글 한 글자가 UTF-8 세 바이트로 인코딩되어 Content-Length는 글자 하나가 아니라 세 옥텟을 세는 관계도
한글 한 글자가 UTF-8 세 바이트로 인코딩되어 Content-Length는 글자 하나가 아니라 세 옥텟을 세는 관계도
그림 크게 열기 ↗SVG 저장

그림에서 무엇을 볼까요?

한글 한 글자가 UTF-8 세 바이트로 인코딩되어 Content-Length는 글자 하나가 아니라 세 옥텟을 세는 관계도

HTTP(에이치티티피, 웹 전송 규약) 메시지의 Content-Length(콘텐츠 렝스, 본문 길이)는 본문과 관련된 데이터 길이를 8비트 바이트 단위인 옥텟 수로 적습니다. 영문 A는 UTF-8에서 한 바이트이므로 글자 수와 바이트 수가 같습니다. 그러나 한글 가는 세 바이트이고, 이모지 일부는 네 바이트입니다.

따라서 본문이 가 한 글자라고 Content-Length: 1을 보내면 실제 세 바이트보다 짧게 선언한 셈입니다. 수신자가 그 숫자를 메시지 경계로 사용하면 뒤 두 바이트가 다음 데이터처럼 남아 파싱 오류나 연결 문제를 만들 수 있습니다.

함께 확인할 점

본문을 UTF-8로 보낸다고 가정해 인코딩 뒤 바이트 수를 셉니다. 압축, 전송 코딩, HTTP 버전별 프레이밍은 제외합니다.

생각해 볼 질문

‘A가🙂’를 UTF-8로 보낼 때 각 글자가 몇 바이트인지 나누어 적고, 합계가 활동 결과와 같은지 확인해 보세요.

← 논리적 사고 그림 더 보기