- 프로토콜(Protocol): 데이터 전송을 위한 규칙을 말하며,
HTML,이미지,동영상,음성같은 파일도 전송 가능함- 클라이언트-서버 프로토콜: (보통 웹 브라우저) 수신자 측에 의해 요청이 초기화 되는 프로토콜을 의미
GET요청(request)
GET /mypage.html
응답(response)
<HTML>
My Page
</HTML>
POST 메서드 추가요청(request)
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
응답(response)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
한계
기본 비지속 연결 => 링크를 클릭할 때마다(요청 시마다) 새로운 TCP의 handshake 연결이 이뤄짐
- 커넥션 하나당 요청 하나와 응답 하나만 처리 가능
- 이 부분이 매우 비효율적
- 서버 부하의 문제
HTTP/1.1은 지속 연결 => 서버는 응답을 보낸 후 TCP 연결을 그대로 유지
- 전체 웹 페이지를 하나의 지속 TCP 연결을 통해 보낼 수 있음
- 파이프라이닝을 이용한 지속 연결을 사용
요청(request)
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header
응답(response)
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
(content)
한계
HTTP의 Head Of Line Blocking(HOL) <= 파이프라이닝의 문제점
- 멀티플렉싱이 아닌 응답 처리를 미루는 방식 => 응답의 처리를 순차적으로 진행하기 때문에, 결국 후순위의 응답은 지연될 수밖에 없음
- 영상 같은 거 받으면 뒤에 데이터 한참 대기해야 함(Blocking)
Round Trip Time(RTT)
- 하나의 Connection에 하나의 요청을 처리하는 특성 때문에 latency 증가
Fat message headers
- HTTP/1.1 헤더에는 많은 Meta data 존재
- 매 요청 시 중복된 헤더값을 전송하게 되며(별도의 domain sharding을 하지 않았을 경우), 또한 해당 domain에 설정된 cookie 정보도 매 요청 시 헤더에 포함되어 전송함
Limited priorities: 우선순위 없음
Client-driven Transission: 정보 요청을 해야만 통신 가능
- HTTP/2.0은 Multiplexed Stream 적용 => 병렬 처리로 HOL 해결
- HTTP/2.0은 Binary frame으로 인코딩되어 전송
- HTTP/1.1은 일반 텍스트 형식으로 메시지 전송
QUIC
- Quick UDP Internet Connections
- TCP를 대체하는 범용 목적의 전송 계층(Transport Layer) 통신 프로토콜로 구글에서 만들었음
- TCP의 Stream은 하나의 chain으로 연결되지만, QUIC는 각 Stream당 독립된 Stream chain을 구성하여 TCP HOL Bloking을 해결
- UDP와 동일하게 Transport Layer에서 구동되지만, UDP 위에 새로운 계층을 추가함으로써 신뢰성 확보
- 추가된 계층은 TCP에 존재하는 패킷 재전송, 혼잡 제어, 속도 조정 및 다른 기능 제공
[참고]
1. https://csj000714.tistory.com/733
2. https://guiyomi.tistory.com/105