Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발블로그

HTTP/1.1 vs HTTP/2 본문

HTTP/1.1 vs HTTP/2

학교옆메추리 2020. 5. 29. 14:44

HTTP (HyperText Transfer Protocol)

웹상에서 클라이언트와 서버간의 통신을 위한 프로토콜, TCP connection을 기반으로 동작한다.


HTTP/1.1

connection 하나당 하나의 resquest/response를 처리한다. 그렇기 때문에 동시전송과 다수 리소스 처리에 대한 속도 및 성능에 대한 이슈를 가진다.

 

HOLB (Head Of Line Blocking)

같은 큐에 있는 패킷이 첫번째(head of line) 패킷에 의해 지연될 때 발생하는 성능 저하 현상

piplining 기법을 통해 하나의 connection을 통하여 다수의 파일을 요청/응답 할 수 있다. 이를 통해 성능 향상을 꾀할 수 있으나 문제점이 존재한다.

 

클라이언트에서 3개의 이미지를 요청한다고 가정하자. 하나의 connection에서 순차적으로 이미지를 요청하게 되는데, 첫 번째 이미지의 응답이 지연되면 두, 세번째 이미지에 대한 요청도 함께 지연되기 때문에 문제가 발생한다.

 

Heavy header

http 1.1의 헤더에는 많은 메타 정보들이 저장되어 있으며(쿠키 포함), 각 요청마다 중복된 헤더값을 계속 전송하기 때문에 성능 저하에 영향을 미친다.


 

HTTP/2

HTTP/1.1의 많은 부분이 개선되었습니다.

 

Multiplexed Streams

한 번에 하나의 connection을 맺고 요청/응답을 진행하는 HTTP/1.1과는 다르게 하나의 connection으로 다수의 데이터를 주고받을 수 있다.

응답은 순서에 상관없이 stream으로 주고받는다.

 

Stream Prioritization

리소스간 우선순위를 설정함으로써 필요한 리소스에 대한 응답을 먼저 받는다. (ex: image보다 css파일 먼저

 

Header Compression

같은 요청을 전송하더라도 매번 중복된 헤더값을 전송하는 HTTP/1.1과는 다르게 HPACK 압축형식을 사용하여 헤더의 메타데이터를 압축하는데, 이 때 중복되는 헤더값을 색인값으로 처리함으로써 헤더의 크기를 줄이고, 성능 개선을 꾀합니다.

또한 기존의 텍스트 형태의 리소스가 아닌, 바이너리 값으로 변환하여 오버헤드를 줄입니다.

 

Server Push

서버가 단일 클라이언트 요청에 대해 여러 응답을 보낼 수 있는 기능. 

 

 

 

 

 

 

 

 

 

 

 

'' 카테고리의 다른 글

Static file 서빙하기  (0) 2020.07.12
Express middlewares  (0) 2020.07.12
DEVIEW Review(2018.10.13)  (0) 2020.05.28
JS Promise (2018.10.10)  (0) 2020.05.28
JS this (2018.10.06)  (0) 2020.05.28