HTTP 완벽가이드 16장

16장 국제화

주요 국제화 이슈인 문자집합 인코딩과 언어 태그를 알아본다.

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

  • HTTP에서 엔터티 본문이란 비트들로 가득 찬 상자에 불과하다.
  • 국제 콘텐츠를 지원하기 위해, 서버는 클라이언트에게 각 문서의 문자와 언어를 알려줘서, 클라이언트가 문서를 이루고 있는 비트들을 올바르게 문자들로 풀어내고, 처리해서 사용자들에게 제공한다.
  • 서버는 클라이언트에게 문서의 문자와 언어를 HTTP Content-Type charset 매개변수와 Content-Language 헤더를 통해 알려준다.
  • 클라이언트는 서버에게 자신이 어떤 차셋 인코딩 알고리즘들과 언어들을 이해하며 무엇을 선호하는지 말해주기 위해 Accept-Charset과 Accept-Language 헤더를 보낸다.

2. 문자집합과 HTTP

2.1 Charset은 글자를 비트로 변환하는 인코딩이다

  • HTTP Charset 값은 어떻게 엔터티 콘텐츠 비트들을 특정 문자 체계의 글자들로 바꾸는지 말해준다.
  • Content-Type: text/html; charset=iso-8859-6
    • Content-Type 헤더는 수신자에게 콘텐츠가 HTML 파일임을 말해준다.
    • charset 매개변수는 수신자에게 콘텐츠 비트들을 글자들로 디코딩하기 위해 iso-8859-6 아랍 문자집합 디코딩 기법을 사용하라고 말해준다.

3. 언어 태그와 HTTP

  • 언어 태그는 언어에 이름을 붙이기 위한 짧고 표준화된 문자열이다.

3.1 Content-Language 헤더

  • 엔터티가 어떤 언어 사용자를 대상으로 하고 있는지 서술한다.
  • 텍스트 문서 이외의 오디오 클립, 동영상, 애플리케이션도 특정 언어 사용자를 대상으로 할 수 있다.
  • 콘텐츠가 여러 언어를 대상으로 한다면, 언어들을 나열할 수 있다.
    • Content-Language: mi, en

3.2 Accept-Language 헤더

  • 웹 서버가 자원에 대해 여러 언어로 된 버전을 갖고 있다면, 사용자에게 선호하는 언어로 된 컨텐츠를 제공한다.
  • 클라이언트는 자신이 이해 할 수 있는 콘텐츠를 요청하기 위해 Accept-Language와 Accept-Charset을 사용한다.

3.3 대소문자 구분 및 표현

  • 모든 태그는 대소문자가 구분되지 않는다.
  • 관용적으로 언어를 나타날때 소문자, 국가를 나타낼 때는 대문자를 사용한다.

4. 국제화된 URI

  • 오늘날 URI는 국제화를 지원하지 않는다.
  • 오늘날의 URI는 US-ASCII의 부분집합으로 구성되어 있다.

4.1 국제적 가독성 vs 의미 있는 문자들

  • 문자집합에는 제한이 있기 때문에, URI는 비영어권 사람들도 쉽게 사용하고 기억할 수 있도록 설계되지는 못했다.
  • URI 저자들은 리소스 식별자의 가독성과 고유 가능성의 보장이 중요하다고 여겼다.
  • ASCII 문자들의 제한된 집합으로 이루어진 URI를 갖게 되었다.

4.2 URI에서 사용될 수 있는 문자들

  • US-ASCII 문자들의 부분집합은 예약된 문자들, 예약되지 않은 문자들, 이스케이프 문자들로 나뉜다.
  • 예약되지 않음: [A-Za-z0-9] |”-“|”_”|”.”|”!”|”~”|”*”|”‘“|”(“|”)”
  • 예약됨: “;”|”/“|”?”|”:”|”@”|”&”|”=”|”+”|”$”|”,”
  • 이스케이프: “%”

4.3 이스케이핑과 역이스케이핑(unescaping)

  • 이스케이프는 예약된 문자난 다른 지원하지 않는 글자들을 안전하게 URI에 삽입할 수 있는 방법을 제공한다.
  • 이스케이프는 퍼센트 글자 하나와 뒤이은 16진수 그자 둘로 이루어진 세 글자 문자열이다.
  • 애플리케이션은 어떤 URI도 두 번 언이스케이핑 되지 않도록 해야 한다.
    • 이스케이핑된 퍼센트 기호를 포함한 URI를 언이스케이핑하면 퍼센트 기호가 포함된 URI가 만들어진다.
    • 잘못하여 한 번 더 언이스케이핑을 하게 되면 이스케이프의 일부처럼 처리되어 데이터의 손실을 유발한다.

5. 기타 고려사항

5.1 헤더와 명세에 맞이 않는 데이터

  • HTTP 헤더는 반드시 US-ASCII 문자집합의 글자들로만 이루어져야 한다.
  • HTTP 애플리케이션은 글자들을 처리하기 위해 운영체제와 리아브러리 루틴을 사용한다.

5.2 날짜

  • HTTP 명세는 올바른 GMT 날짜를 명확히 정의하지만, 모든 웹 서버와 클라이언트가 규칙을 따르지 않는다.
  • 명세에 맞지 않는 날짜를 관대하게 받아들이고, 받아들이면서 충돌을 일으키지 말아야한다.

5.3 도메인 이름

  • 국제화 문자를 포함하는 도메인 이름을 국제화 도메인 이름(Internationalizing Domain Name)이라 한다.
  • 웹브라우저는 퓨니코드를 사용해 사용자가 입력한 다국어로 된 도메인 이름을 알파벳과 숫자 등으로 된 도메인 이름으로 변환한다.

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×