Ideveloper's
Thinking

ideveloper
Front end Developer who steadily study
Jan 12, 2020 - 5 min read

HTTP에서의 국제화

이 글은 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는 문자 데이터 및 그와 관련된 언어와 차셋라벨의 전송에만 관심을 가지고, 글자의 모양을 어떻게 표현할 것인가 하는 것은 사용자의 그래픽 디스플레이 소프트웨어(브라우저, 운영체제, 글꼴)가 결정합니다.

image

표준화된 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을 사용하게 됩니다.

언어 태그의 종류

서브 태그

  • 언어 태그는 하이픈으로 분리된 하나 이상의 서브태그로 이루어져 있습니다.
    • 첫번째: 주 서브태그라 불리고, 이 값들은 표준화 되어 있습니다. (언어 토큰)
    • 두번째: 선택적이고 자신만의 이름 표준을 따릅니다. (국가 토큰)
    • 세번째: 등록되어 있지는 않습니다.
sgn-US-MA

웹 브라우저에서 선호 언어 설정하기

ex) 크롬: 설정 > 고급 설정 표시 > 언어 및 입력 설정 ex) ie: 도구 > 인터넷 옵션 > 언어


국제화 된 URI

  • URI 저자들은 리소스 식별자의 가독성꽈 공유 가능성의 보장이, 대부분의 이미있는 문자들로 구성될 수 있도록 하는 것 보다 더 중요하다고 여겼습니다.
  • 따라서 URI는 ASCII 문자들의 제한된 집합으로 이루어져 있습니다.
  • URI는 국제화에 친화적이지는 않은데 URI 이식성읨 목표는 언어 유연성의 목표보다 중요했기 때문입니다.

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

  • 예약 되지 않은 문자들
    • [A-Za-z0-9] | "-" | "_" | "." | "!" | "~" | "*" | "'" | """ | "(" | ")"
  • 예약 된 문자들 (특별한 의미 가짐)
    • ";" | "/" | "?" | ":" |"@" | "&" | "=" | "+" | "$" | ","
  • 이스케이프 문자들
    • "%" <HEX> <HEX>

이스케이핑과 역 이스케이핑 하기

  • URI 이스케이프는 예약된 문자나 다른 지원하지 않는 글자(스페이스와 같은)들을 안전하게 URI에 삽입할 수 있는 방법을 제공합니다.
  • 이스케이프는 퍼센트 글자 하나와 뒤이은 16진수 글자 둘로 이루어진 세글자 문자열입니다.
    • ex: URL에 스페이스 (ASCII 값 32) 를 표시 => %20
  • 또한 이스케이프 값들은 US-ASCII 코드의 범위(0-127)에 있어야 합니다.
Powered with by Ideveloper