티스토리 뷰

728x90
반응형

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

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

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

 

HTTP 완벽 가이드

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

book.naver.com

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가 있는지 찾아봄

 

ㅓㅗㅠㅏㅓㅜㅏ

728x90
반응형

'네트워크 > 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
링크
«   2024/11   »
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
글 보관함