티스토리 뷰
2022 우아한스터디 "HTTP 완벽가이드"를 진행하면서
'HTTP 완벽 가이드' 책을 읽고, 글쓴이의 생각을 정리하는 글 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=8509980
1. 내용 협상
Client의 컴퓨팅 자원의 상태가 모두 다르기 때문에, Client의 상황에 따라 경량되거나, 이미지가 삭제된 형태의 HTTP Message를 받아야 할 수가 있습니다.
한국어로 번역된 단어는 내용 협상인데, Client <-> Sever 간 HTTP Message를 주고받을 때 어떤 버전의 문서를 주고받을지 결정하는 방법(Ex. Img가 있는/없는 Version)이라고 이해하면 편합니다.
이런 협상을 하는 방법은 크게 3가지로 생각해 볼 수 있습니다.
기법 | how to act | 장점 | 단점 |
Client 주도 | Client가 Request를 보내면 Server가 선택지를 반환하고, 이걸 Client가 다시 선택해서 받을 문서를 정함 | Server입장에서 구현이 용이 + Client가 원하는 결과를 얻을 수가 있음 | Request 처리를 위해서 최소 2번의 통신이 요구됨 (Req→선택지→Req→Rep) |
Server 주도 | Server가 Client의 Request를 검증해서 알아서 결정 | Client 주도 협상보다 빠름 | Request Header가 불분명 할 경우 에러가 발생할 수 있음 |
투명 | Proxy등이 중간에서 Server 대신 협상 | Case By Case | Case By Case |
1_1. Client 주도 협상
Client 주도 협상은 Client의 Reqest에 대해서 다시한번 선택지를 물어보게 됩니다. 때문에, HTTP 통신이 두번이 강제되고 이는 UX의 저하로 직결되죠
추가적으로 Client의 선택지를 제시하기 위한 1개 이상의 URL이 준비되어야 하기 때문에, 많이 사용을 안합니다.
1_2. Server 주도 협상
Client는 Request Header에 Accept 관련 내용을 추가함으로써 Server에 어떠한 형태의 Reaponse를 선호하는지 명시해 줄 수가 있습니다.
Header | 설명 | Entity 에 대응되는 Header |
Accept | Server가 어떤 미디어 타입을 보내도 되는지를 명시 | Content-Type |
Accept-Language | Server가 어떤 언어로 보내도 되는지를 명시 | Content-Language |
Accept-Charset | Server가 어떤 charset을 사용해도 될지 명시 | Content-Type |
Accept-Encoding | Server가 어떤 Encoding을 보내도 되는지 명시 | Content-Encoding |
이때 Accept 관련 Header에는 여러가지 값이 들어갈 수 있고, 이 값들의 우선순위를 q value를 사용해서 나타냅니다.
#nl을 가장 선호하고, en, fr=tr 순으로 선호한다는것을 나타냄
#이때 q=0이기 때문에, fr과 tr은 받지 않겠다는것을 의미
Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
1_3. 투명 협상
투명한 협상은 중간에 Proxy(=Cache)가 위치하면서, Client의 Accept Header를 파악해서 적절한 Data를 Caching하는 방법이 한가지가 있습니다(책에서 예시로 든 방법)
이때, Client 요청의 header중 특정된 header를 기준으로 variant를 만들고, 이를 Vary라는 header에 포함시켜서 Client의 Request에 따른 HTTP Message를 변화시킬 수가 있습니다.
Client ----[req]-----> Proxy --------------> Server Client의 Request가 Proxy로 도착
+----------------------------------------+
|GET / HTTP/1.1 |
|Host : www.joes-hardware.com |
|User-agent: spiffy multimedia browser |
|Accept-Language: fr;q=1.0 |
+----------------------------------------+
Client --------------> Proxy -----[req]----> Server Proxy에 Cache된게 없으므로 Server로 직행
Client <-------------- Proxy <----[rep]----- Server Req를 분석해서, 특정 Header에 맞는
Vary Header를 추가하고 Reponse를 보냅
+----------------------------------------+
|HTTP/1.1 200 OK |
|Content-Language: fr |
|Vary: User-agent |
| |
|LargeContentVersion.... |
+----------------------------------------+
Client <-------------- Proxy <----[rep]----- Server Server의 Response를 Var에 맞게 Cache
Client <----[rep]----- Proxy <-------------- Server Client한태 Rep 전달
===================================다른 Client의 요청=================================
Client2 ---[req]-----> Proxy --------------> Server Proxy에서 User-agent를 검토하고
Vary가 같은 Cache가 있는지 찾아봄
ㅓㅗㅠㅏㅓㅜㅏ
'네트워크 > HTTP' 카테고리의 다른 글
20. 국제화 (0) | 2022.08.03 |
---|---|
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
- 자료구조
- Search알고리즘
- C++
- GDC
- prime number
- 동적계획법
- 분할정복
- Python
- Greedy알고리즘
- 알고리즘
- stack
- 이분탐색
- 완전탐색 알고리즘
- Sort알고리즘
- 사칙연산
- AVX
- 병렬처리
- 프로그래머스
- git
- hash
- 코딩테스트
- heap
- SIMD
- 컴퓨터그래픽스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |