AI가 HTTP Content-Length를 글자 수로 적어도 될까?
영문·한글·이모지 본문을 바꾸어 글자 수와 UTF-8 바이트 수를 비교하고, Content-Length에 들어갈 값을 검산합니다.
그림에서 무엇을 볼까요?
한글 한 글자가 UTF-8 세 바이트로 인코딩되어 Content-Length는 글자 하나가 아니라 세 옥텟을 세는 관계도
HTTP(에이치티티피, 웹 전송 규약) 메시지의 Content-Length(콘텐츠 렝스, 본문 길이)는 본문과 관련된 데이터 길이를 8비트 바이트 단위인 옥텟 수로 적습니다. 영문 A는 UTF-8에서 한 바이트이므로 글자 수와 바이트 수가 같습니다. 그러나 한글 가는 세 바이트이고, 이모지 일부는 네 바이트입니다.
따라서 본문이 가 한 글자라고 Content-Length: 1을 보내면 실제 세 바이트보다 짧게 선언한 셈입니다. 수신자가 그 숫자를 메시지 경계로 사용하면 뒤 두 바이트가 다음 데이터처럼 남아 파싱 오류나 연결 문제를 만들 수 있습니다.
함께 확인할 점
본문을 UTF-8로 보낸다고 가정해 인코딩 뒤 바이트 수를 셉니다. 압축, 전송 코딩, HTTP 버전별 프레이밍은 제외합니다.
생각해 볼 질문
‘A가🙂’를 UTF-8로 보낼 때 각 글자가 몇 바이트인지 나누어 적고, 합계가 활동 결과와 같은지 확인해 보세요.
