일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CVAT
- Kafka
- docker
- EC2
- tcp
- CSV
- airflow
- AWS
- java
- Network
- Vision
- JavaScript
- PostgreSQL
- grafana
- jvm
- Packet
- ip
- Trino
- MAC address
- OS
- Python
- helm
- zookeeper
- log
- kubeadm
- kubectl
- Spring
- aws s3
- kubernetes
- Operating System
- Today
- Total
JUST WRITE
HTTP 1.1 vs HTTP 2.0 본문
HTTP/1.1
HTTP는 1996년에 1.0 버전을 공식적으로 도입하였다.(RFC1945)
1997년에 1.1 버전을 공식적으로 출시하였다.
1.1 버전에 개선과 업데이트는 1999년에 출시하였다.(RFC2616)
개선이 되기는 하였지만 느리고 비효율적이었다.
아래와 같은 단점이 있다.
- HOL(Head of Line) Blocking
- RTT(Round Trip Time) 증가
- 무거운 Header 구조
HOL Blocking
Head of Line BlockingHTTP/1.1에서는 보통 Connection 1개당 1개의 Request를 처리할 수 있다.
이러한 부분을 개선하기 위해 pipelining 기법이 존재한다.
이 기법으로 Connection 1개당 다수의 파일을 Request 할 수 있다.
대신 1개의 파일에 대한 Response가 완료되야 다음 파일의 Response가 진행 가능하다.
완료될 때까지 대기해야 하는 현상을 HTTP HOL Blocking이라고 한다.
RTT 증가
Round Trip Time 증가
HTTP/1.1에서는 보통 Connection 1개당 1개의 Request를 처리할 수 있다.
매 Request마다 Connection을 만들고 3-way Handshake가 반복적으로 일어난다.
이렇게 불필요한 RTT 증가, 네트워크 지연으로 성능 저하하게 된다.
무거운 Header 구조
HTTP/1.1의 Header에서는 많은 Meta 정보가 저장되어 있다.
Web Page 방문 시 다수의 HTTP Request 발생, Request마다 중복된 Header값을 전송한다.
(별도의 domain sharding을 하지 않은 경우)
각 domain에 설정된 Cookie 정보 Request마다 Header에 전송된다.
HTTP/2.0
HTTP/2.0은 2015년에 공개되었다.(RFC7540)
SPDY에 기반하고 있으며 IETF에서 개발되고 있다.
새로 작성한 것이 아닌 HTTP/1.1을 개선한 것이다.
성능 개선에 초점을 둔 것이다.
주요 특징은 아래와 같다.
- Multiplexed Streams
- Stream Prioritization
- Server Push
- Header Compression
Multiplexed Streams
1개의 Connection에 다수의 Message를 주고받을 수 있다.
Response를 순서에 상관없이 stream으로 주고받는다.
HTTP/1.1의 Connection Keep-Alive, Pipelining의 개선이라 볼 수 있다.
Stream Prioritization
HTTP/2.0에서는 Resouce 간의 우선순위를 설정할 수 있다.
예를 들어 요청한 HTML 문서에 CSS 파일과 Image 파일이 존재한다고 가정한다.
Image보다 CSS파일이 늦어지면 Rendering이 늦어질 수 있다.
이때, CSS 우선순위를 높여서 해결할 수 있다.
Server Push
Server가 Client에 Request 없어도 Resouce를 보낼 수 있다.
HTTP/1.1에서는 HTML 문서를 수신한 후 해석 중에 필요한 Resouce를 Request 한다.
HTTP/2.0에서는 Server Push 기법으로 미리 HTML 문서에 포함된 Resouce 미리 보내주는 것이다.
Header Compression
HTTP/2.0에서는 Header 정보를 압축하기 위해 Header Table과 Huffman Encoding을 사용한다.
HPACK 압축방식이라 부른다.(RFC7541)
HTTP/1.1에서는 Request에서 Header에 중복 값이 존재해서 그냥 전송한다.
HTTP/2.0에서는 Header에 중복값이 존재하면 Static/Dynamic Header Table을 이용하여 해결한다.