티스토리 뷰
2022 우아한스터디 "HTTP 완벽가이드"를 진행하면서
'HTTP 완벽 가이드' 책을 읽고, 글쓴이의 생각을 정리하는 글 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=8509980
이번파트 주제의 이름이 좀 특이한데, 사용자 환경에 따라 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)으로 사용하게 됩니다.
'네트워크 > 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
- heap
- AVX
- 자료구조
- Sort알고리즘
- Greedy알고리즘
- 프로그래머스
- prime number
- stack
- C++
- 알고리즘
- 동적계획법
- SIMD
- GDC
- 분할정복
- 이분탐색
- Search알고리즘
- git
- 완전탐색 알고리즘
- 병렬처리
- 컴퓨터그래픽스
- 사칙연산
- hash
- 코딩테스트
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |