본문 바로가기

이것저것 스터디📚/CS 스터디

HTTP 1.1 VS HTTP 2.0

HTTP 1.1 VS HTTP 2.0

HTTP 1.1

* HTTP 1.1 특징

- HTTP 1.0에서는 Connection 당 하나의 요청을 처리할 수 있다보니 동시 전송이 불가능했고(하나의 요청에 대한 응답이 온 후 다음 요청을 처리하기 때문) 이는 네트워크 시간을 지연시키는 단점이 있었다.

- 따라서, HTTP 1.1에서는 HTTP Pipelining이 도입하여 네트워크 시간을 줄이는 방식을 도입하였다.

- HTTP Pipelining : 하나의 Connection으로 다수의 Request와 Response를 처리할 수 있게하는 것으로 HTTP 1.0과 달리 여러 요청들에 대한 응답 처리를 뒤로 미루는 방법을 사용한다.

- 하지만, 이는 완전한 멀티플렉싱이 아닌 응답처리를 미루는 방식이므로 각 응답의 처리는 순차적으로 처리되며(서버는 TCP에서 요청을 받은 순서대로 응답을 해야하기 때문), 결국 후순위의 응답은 지연되는 문제가 발생한다.

- 이러한 문제를 HOL(Head Of Line) Blocking이라 부른다.

- HOL Blocking은 네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말한다.

출처 : https://jins-dev.tistory.com/entry/HTTP11-%EC%9D%98-HTTP-Pipelining-%EA%B3%BC-Persistent-Connection-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

- 또한, HTTP 1.1에서는 무거운 Header 구조를 가진다는 단점이 있다.

- 이는 매 요청마다 중복된 헤더 값을 전송하게 되며, 서버 도메인에 관련된 쿠키 정보도 헤더에 함께 포함되어 전송되기 때문에 Header의 크기가 증가하게 된다.

* HTTP 1.1 개선방법

- Image Spriting : 여러 이미지 파일들에 대한 각각 요청을 하기 보다 한 번의 요청으로 처리한다. 여러 이미지를 모아 하나의 큰 이미지를 만든 후 CSS로 해당 이미지의 좌표값을 지정해서 사용한다.

 

- Domain Sharding : 하나의 Domain에 대해 여러 개의 Connection을 생성하여 병렬로 요청을 보낸다. 하지만, 브라우저 별로 Domain당 Connection 개수의 제한이 존재하기 때문에 근본적인 해결책이 될 수 없다.

 

- CSS, JavaScript 최소화 :  HTTP를 통해 전송되는 데이터의 용량을 줄이기 위해 CSS, JavaScript를 축소한다.

HTTP 2.0

- HTTP 2.0은 HTTP 1.1을 지우고 완전하게 재작성한 것이 아닌, 성능에 초첨을 맞춰 수정하였다.

 

* HTTP 2.0 특징

- Multiplexed Streams : HTTP 1.1의 HTTP Pipelining의 개선안으로 하나의 Connection으로 동시에 여러 개의 메시지를 주고 받을 수 있게 되었고, 응답을 요청 순서에 상관없이 Stream(하나의 TCP 연결 내에서 동시에 여러 개의 독립적인 메시지 교환을 가능하게 하는 추상화된 개념)으로 받기 때문에, HTTP Pipelining의 문제점인 HOL Blocking도 발생하지 않는다.

 

- Stream Prioritization : 응답에 대한 우선순위를 정해 우선선위가 높을수록 응답을 빨리한다. 예를들어, IMG 파일과 CSS 파일에 대한 요청이 있을 때, IMG 파일에 대한 응답으로 CSS 파일에 대해 응답을 하지 못하는 경우, 렌더링이 되지 못하는 문제가 발생할 수 있기 때문에, CSS 파일의 우선순위를 높이는 방법이 있다.

 

- Server Push : 서버가 클라이언트의 요청없이 응답을 보내는 방법으로, 클라이언트의 요청을 최소화하고 서버가 리소스를 알아서 보낸다.

 

- Header Compression : HTTP 1.1의 경우 이전 요청과 중복되는 Header도 중복 전송하여 네트워크 자원을 불필요하게 낭비했지만, HTTP 2.0에서는 HPACK 압축방식으로 클라이언트와 서버는 각각 Header Table을 관리하고 이전 요청과 동일한 필드는 table의 index만 보내고, 변경되는 값은 Huffman Encoding 후 보냄으로써 Header의 크기를 경량화하였다.


* 내 정리

- HTTP 1.1에서는 HTTP 1.0에서의 동시 전송이 불가능한 문제를 해결하기 위해 HTTP Pipelining을(하나의 Connection으로 다수의 Request와 Response를 처리할 수 있게하는 것으로 HTTP 1.0과 달리 여러 요청들에 대한 응답 처리를 뒤로 미루는 방법을 사용한다.) 도입하였다. 하지만, 결국 각 응답의 처리 순서는 순차적으로 진행되기 때문에, HOL Blocking 문제가 발생한다는 문제점이 있었다. 또한 이전 요청과 중복되는 Header 또한 중복 전송하기 때문에 HTTP Header가 무겁다는 단점이 있었다.

- HTTP 2.0에서는 다음과 같은 특징이 있다. Multiplexed Streams(동시에 여러 개의 메시지를 주고 받을 수 있으며, Stream을 사용하여 HOL Blocking이 발생하지 않음), Steam Prioritization(응답에 대한 우선 순위를 정하는 것), Server Push(서버가 클라이언트의 요청 없이 응답을 보내, 클라이언트의 요청을 최소화), Header Compression(이전 요청과 중복되는 Header의 경우 HPACK 압축 방식을 사용하여 Header를 경량화)

 

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

HTTP GET과 POST 차이  (0) 2023.11.14
쿠키와 세션  (0) 2023.10.24
HTTP 대신 HTTPS를 사용해야하는 이유  (0) 2023.10.16
REST API  (1) 2023.10.16
AJAX란?  (1) 2023.10.16