이 글은 HTTP 완벽가이드 16장을 참고해 정리한 포스팅입니다.
시작하기에 앞서
- HTTP는 여러 언어와 문자로 된 국제 문서들의 처리 및 전송을 지원해야 합니다.
- 주요 국제화 이슈
- 서버는 클라이언트에게 문서의 문자와 언어를
HTTP Content-Type charset
매개변수와 Content-Language
헤더를 통해 알려줍니다.
- 클라이언트는 서버에게 자신이 어떤 차셋 인코딩 알고리즘들과 언어를 이해하며 그 중 무엇을 선호 하는지 말해주기 위해 Accept-Charset과 Accept-Language 헤더를 보냅니다.
문자집합과 HTTP
Charset은 글자를 비트로 변환하는 인코딩
- HTTP 차셋 값은, 어떻게 엔터티 콘텐츠 비트들을 특정 문자 체계의 글자들로 바꾸는 지 말해줍니다.
- charset 태그는 비트들을 글자들로 변환하거나 혹은 그 역을 해주는 알고리즘을 명명합니다.
- charset 태그는 등록된 MIME 문자집합에 표준화되어있고, IANA가 관리하게 됩니다.
charset 예제
Content-Type: text/html; charset=iso-8559-6
- charset 매개변수는 수신자에게 콘텐츠 비트들을 글자로 디코딩하기 위해 iso-8859-6 디코딩 기법을 사용하라고 말하는 것
문자집합과 인코딩은 어떻게 동작하는가
- HTTP는 문자 데이터 및 그와 관련된 언어와 차셋라벨의 전송에만 관심을 가지고, 글자의 모양을 어떻게 표현할 것인가 하는 것은 사용자의 그래픽 디스플레이 소프트웨어(브라우저, 운영체제, 글꼴)가 결정합니다.
표준화된 MIME 차셋 값
- 특정 문자 인코딩과 특정 코딩된 문자집합의 결합은 MIME 차셋 이라고 부르게 됩니다.
- HTTP는 표준화된 MIME 차셋 태그를 Content-Type과 Accept-Charset 헤더에 사용하게 됩니다.
Content-Type charset 헤더와 META 태그
- 웹서버는 클라이언트에게 MIME 차셋 태그를 charset 매개 변수와 함께 Content-Type 헤더에 담아 보냅니다.
- 만약 문자집합이 명시적으로 나열되지 않았다면, HTML 콘텐츠에서 추측하게 되는데,
<META HTTP-EQUIV= "Content-Type">
태그에서 찾을 수 있습니다.
Accept-Charset 헤더
- HTTP 클라이언트는 서버에게 정확히 어떤 문자 체계를 그들이 지원하는지 Accept-Charset 요청 헤더를 통해 알려줍니다.
- 클라이언트가 지원하는 문자 인코딩의 목록을 제공합니다.
언어 태그와 HTTP
- 언어 태그는 언어에 이름을 붙이기 위한 짧고 표준화 된 문자열입니다.
Content-Language 헤더
- Content-Language 엔터티 헤더 필드는 엔터티가 어떤 언어 사용자를 대상으로 하고 있는지 서술합니다.
- 텍스트만을 위한 것이 아니고, 오디오 클립, 동영상 그리고 애플리케이션도 특정 언어 사용자를 대상으로 할 수 있습니다.
- 만약 콘텐츠가 여러 대상자를 대상으로 한다면, 여러 언어를 나열할 수 있습니다.
Accept-Language 헤더
- 언어 제약과 선호도를 웹서버에 전달하게 됩니다.
- 클라이언트는 자신이 이해할 수 있는 콘텐츠를 요청하기 위해 Accept-Language와 Accept-Charset을 사용하게 됩니다.
언어 태그의 종류
서브 태그
- 언어 태그는 하이픈으로 분리된 하나 이상의 서브태그로 이루어져 있습니다.
- 첫번째: 주 서브태그라 불리고, 이 값들은 표준화 되어 있습니다. (언어 토큰)
- 두번째: 선택적이고 자신만의 이름 표준을 따릅니다. (국가 토큰)
- 세번째: 등록되어 있지는 않습니다.
웹 브라우저에서 선호 언어 설정하기
ex) 크롬: 설정 > 고급 설정 표시 > 언어 및 입력 설정
ex) ie: 도구 > 인터넷 옵션 > 언어
국제화 된 URI
- URI 저자들은 리소스 식별자의 가독성꽈 공유 가능성의 보장이, 대부분의 이미있는 문자들로 구성될 수 있도록 하는 것 보다 더 중요하다고 여겼습니다.
- 따라서 URI는 ASCII 문자들의 제한된 집합으로 이루어져 있습니다.
- URI는 국제화에 친화적이지는 않은데 URI 이식성읨 목표는 언어 유연성의 목표보다 중요했기 때문입니다.
URI에서 사용될 수 있는 문자들
- 예약 되지 않은 문자들
- [A-Za-z0-9] | "-" | "_" | "." | "!" | "~" | "*" | "'" | """ | "(" | ")"
- 예약 된 문자들 (특별한 의미 가짐)
- ";" | "/" | "?" | ":" |"@" | "&" | "=" | "+" | "$" | ","
- 이스케이프 문자들
이스케이핑과 역 이스케이핑 하기
- URI 이스케이프는 예약된 문자나 다른 지원하지 않는 글자(스페이스와 같은)들을 안전하게 URI에 삽입할 수 있는 방법을 제공합니다.
이스케이프
는 퍼센트 글자 하나와 뒤이은 16진수 글자 둘로 이루어진 세글자 문자열입니다.
- ex: URL에 스페이스 (ASCII 값 32) 를 표시 =>
%20
- 또한 이스케이프 값들은 US-ASCII 코드의 범위(0-127)에 있어야 합니다.