티스토리 뷰

네트워크/HTTP

20. 국제화

Teus 2022. 8. 3. 12:03
728x90
반응형

2022 우아한스터디 "HTTP 완벽가이드"를 진행하면서

'HTTP 완벽 가이드' 책을 읽고, 글쓴이의 생각을 정리하는 글 입니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=8509980 

 

HTTP 완벽 가이드

성공적인 웹 트랜잭션 뒤의 숨은 핵심, HTTP의 모든 것『HTTP 완벽 가이드』는 HTTP 규약이 어떻게 작동하고 웹 기반 애플리케이션을 개발하는 데 어떻게 사용하는지 설명하고, HTTP가 효율적으로 동

book.naver.com

이번파트 주제의 이름이 좀 특이한데, 사용자 환경에 따라 Internationalization을 하는 내용입니다.

1. Inernationalization

웹페이지는 이용하는 사용자가 한 국가로 정해져 있으면 상관이 없지만, 사용자에 따라서 사용하는 언어가 다를 수 있습니다.

 

때문에, HTTP Message Header중 Accept-Language, Accept-Charset이라는 header를 지원합니다

#프랑스어 1순위, 영어가 2순위로 설정(q값을 기준으로)
Accept-Language: fr, en;q=0.8
#전달받은 HTTP 응답의 코드 Bit을 Decoding할 수 있는 방법을 전송
Accept-Charset : iso-8859-1, utf-8

1_1. 문자열 Encoding은 어떻게 이뤄지는가

HTTP Message는 결국 Encoding 된 후 2진수로 변환되어 TCP/IP 로 전송됩니다.

 

이때 전송된 이후 HTTP Header부분까지는 영어로 Decoding이 되지만, Entity 부분은 header의 정보를 기반으로 다르게 Decoding 되어야 합니다.

<Data Bit>
이진수 11100001
↓
↓
십진수 225
↓
↓
iso-8859-6 으로 Decoding
    +---+--------------------------+
    |65 |LATIN CAPITAL LETTER A    |
    +---+--------------------------+
    |.. | ..                       |
    +---+--------------------------+
    |225|ARABIC LETTER FEH         | <= iso-8859-6 Encoding Table에서 225에 해당하는 값을 찾음
    +---+--------------------------+
    |.. | ..                       |
    +---+--------------------------+
↓
↓
ARABIC LETTER FEH를 브라우저에 전달

전달받은 Header에는 아래와같은 Header가 있었을 것을 예상해 볼 수가 있습니다.

Content-type: text/html ; charset=ISO-8859-6

 

1_2. Charset이 왜 필요한가?

전 세계에서 통일된 문자열 Encoding이 있으면 좋지만, 안타깝게도 표준화된 Encoding(UTF-8)이 있을 뿐 통일된 Encoding은 없습니다.

 

때문에, 225(b'11100001')이 있을 때, 해당 값을 해석하는 방법은 여러가지가 존재합니다.

Encoding 방법 Decoding된 문자
iso-8859-1 양음 악섹트가 붙은 소문자 'a'
iso-8859-6 아랍어 'FEH'
iso-8859-7 그리스어 'Alpha'
iso-8859-8 히브리어 'BET'

2. 국제화된 URI

URI는 현재 대부분 영어로 되어있는것을 알 수 있습니다.

 

책이 쓰였을 당시에는 표준이 정립되지 않았지만, 현재는 표준이 어느정도 받아들여짐에 따라 국제화된 URI도 종종 사용됩니다.

 

URI는 결국 사용자가 유입되는 통로이기 때문에, 의미를 가지면서 가독성도 좋은 URI를 선호합니다.

 

하지만, 비 영어권 국가에서는 아무래도 가동성을 확보하기가 어렵습니다.

 

초기 URI 저자들은 가독성 보다는 의미있는 문자들을 중시했기 때문에 ASCII 문자들로 제한된 집합으로 URI를 설계했습니다.

 

때문에, URI에 사용 가능한 문자들은 아래와같이 정리됩니다

문자 분류 사용 가능 문자집합
예약되지 않음 [A-Za-z0-9]|"-"|"_"|"."|"!"|"~"|"*"|"'"|"("|")"|
예약됨 ";"|"/"|"?"|":"|"@"|"&"|"="|"+"|"$"|","
이스케이프 "%" <HEX>  <HEX>

때문에 URI에 예약어를 사용해야 할 경우, 이스케이프 문자와 ASCII 번호를 결합하여 사용하게 됩니다.

 

Ex. URI에 'Space' 공백을 추가하고 싶다면, %20 (16진수 20이므로, 10진수로는 32)으로 사용하게 됩니다.

 

 

728x90
반응형

'네트워크 > HTTP' 카테고리의 다른 글

21. 내용협상/트랜스코딩  (0) 2022.08.05
19. Entity & Encoding(2)  (0) 2022.07.29
18. Entity & Encoding  (0) 2022.07.22
16. 인증2(다이제스트 인증)  (0) 2022.07.14
15. 인증  (0) 2022.07.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함