본문 바로가기

HTTP

[HTTP] 국제화 : 문자집합 인코딩

 

#1. 국제적인 콘텐츠를 다루기 위해 필요한 HTTP 지원

국제 콘텐츠를 지원하기 위해 서버는 클라이언트에게 각 문서의 문자와 언어를 알려주어야 한다. 클라이언트가 올바르게 문서를 이루고 있는 비트들을 문자들로 풀어내고 올바르게 처리해서 사용자에게 콘텐츠를 제공해줄 수 있도록 할 필요가 있다. 서버는 클라이언트에게 문서의 문자와 언어를 HTTP Content-Type charset 매개변수와 Content-Language 헤더를 통해 알려준다.

동시에 클라이언트는 서버에게 사용자가 어떤 언어를 이해할 수 있고 어떤 알파벳의 코딩 알고리즘이 브라우저에 설치되어 있는지 말해줄 필요가 있다. 클라이언트는 서버에게 자신이 어떤 차셋 인코딩 알고리즘들과 언어들을 이해하며 그중 무엇을 선호하는지 말해주기 위해 Accept-Charset과 Accept-Language 헤더를 보낸다.

Accept-Language: fr, en;q=0,8
Accept-Charset: iso-8859-1, utf-8

#2. 문자집합과 HTTP

 

차셋(Charset)은 글자를 비트로 변환하는 인코딩이다.

차셋 값은 엔터티 콘텐츠 비트들을 특정 문자 체계의 글자들로 바꾸는지 말해준다. 


문자집합과 인코딩은 어떻게 동작하는가

 

HTTP 문자집합은 문자 인코딩 구조와 코딩된 문자집합을 결합한 것이다.

  1. 데이터 비트를 인코딩 구조를 사용하여 디코딩한다.
  2. 코딩된 문자집합을 사용하여 글자를 찾는다.
  3. MIME 차셋 태그는 문자 인코딩 구조와 코딩된 문자집합 매핑의 결합을 서술한다.
  4. 글꼴과 포매팅 소프트웨어를 사용하여 화면이 보여줄 모양을 찾는다.

표준화된 MIME 차셋 값

특정 문자 인코딩과 특정 코딩된 문자집합의 결합을 MIME 차셋이라고 부른다. HTTP는 표준화된 MIME 차셋 태그를 Content-Type과 Accept-Charset 헤더에 사용한다. 


Content-Type charset 헤더와 META 태그

웹 서버는 클라이언트에게 MIME 차셋 태그를 charset 매개변수와 함께 Content-Type 헤더에 담아 보낸다.

Content-Type: text/html; charset=iso-2022-jp

만약 문자집합이 명시적으로 나열되지 않았다면 수신자는 문서의 콘텐츠로부터 문자집합을 추측하려 시도한다. HTML 콘텐츠에서 문자 집합은 문자 집합을 서술하는 <META HTTP-EQUIV="Content-Type">태그에서 찾을 수 있다.


Accept-Charset 헤더

HTTP 클라이언트는 서버에게 정확히 어떤 문자 체계를 그들이 지원하는지 Accept-Charset 요청 헤더를 통해 알려준다. Accept-Charset 헤더의 값은 클라이언트가 지원하는 문자 인코딩의 목록을 제공한다. 

Accept-Charset 요청 헤더에 대응하는 Content-Charset 응답 헤더는 존재하지 않는다.


MIME 차셋 인코딩 태그

HTTP는 표준화된 MIME 차셋 태그를 Content-Type과 Accept-Charset 헤더에 사용한다.

MIME 차셋 값 설명
US-ASCII 표준화된 유명한 문자 인코딩이다. 이것은 ASCII로도 불리지만 ISO 646애는 여기서 선택된 글자들을 수정한 여러 가지 국제 변형이 있기 때문에 'US'라는 접두어를 붙이는 것을 선호한다. US-ASCII는 7비트 값을 128가지 글자에 대응 시킨다. 하이 비트(high bit)는 사용되지 않는다.
ISO-8859 국제적인 글쓰기를 위해 필요한 글자들을 하이 비트를 이용해서 추가한 US-ASCII의 8비트 확대집한들이다. iso-8859는 지역에 따라 커스터마이징된 문자집합을 제공한다.
ISO-2022-jp 일본어 전자우편과 웹 콘텐츠를 위해 널리 사용되는 인코딩이다. 
EUC-jp 여러 종류의 모드나 이스케이프 문자열 없이 각 글자를 식별하기 위해 명시적 비트 패턴을 사용하는 iso-2022 호환 가변길이 인코딩이다.
shift_JIS 호환성 문제 때문에 약간 복잡하고 모든 문자에 대응하지도 못하지만 여전히 흔하게 쓰이고 있다.
koi8-r 러시아어를 위한 인기 있는 8비트 인터넷 문자 집합 인코딩이다.
UTF-8 UTF-8은 전 세게의 문자들에 대한 보편적 문자집합인 유니코드를 표현하기 위한 흔히 쓰이는 가변길이 문자 인코딩 구조다. 각 글자를 1에서 6바이트로 표현하는 가변길이 인코딩을 문자 코드 값에 사용한다. UTF-8의 주요 기능 중 하나는 통상적인 7비트 아스키 문자열에 대한 하위호환성이다.
windows-1252 마이크로소프트는 자신의 코딩된 문자집합을 코드 페이지라고 부른다. 윈도우 코드 페이지 1252는 iso-8859-1의 확장이다.

 

참고 자료

  • HTTP완벽가이드 , 인사이트

'HTTP' 카테고리의 다른 글

[HTTP] 웹 호스팅  (0) 2020.05.07
[HTTP] 내용 협상(Content-negotiation)과 트랜스코딩  (0) 2020.05.06
[HTTP] 엔터티와 인코딩  (0) 2020.05.05
[HTTP] 보안 HTTPS  (0) 2020.05.05
[HTTP] 기본 인증과 다이제스트 인증  (0) 2020.05.05