본문 바로가기

CS/Network

(Network) HTTP/1.1 VS HTTP/2

HTTP/1.1

HTTP/1.1 이란?

1996년 이후 가장 많이 사용하던 통신 프로토콜

 

 

 

 

 

  • 연결 당 하나의 요청과 응답으로 처리하기 때문에 동시 전송 시 다수의 요청을 처리하는데 속도와 성능 이슈가 존재한다.
  • 요청과 응답이 순차적으로 처리한다.

- HTTP 본문에 포함된 다수의 리소스를 처리할 요청을 처리하기 위해선 

Latency가 길어지게 된다.

 

 

 


Head Of Line Blocking - 특정 응답의 지연

HTTP/1.1는 하나의 연결당 하나의 요청을 처리하기 때문에 위와 같은 여러 단점들이 존재한다.

 

이러한 단점을 개선하기 위한 방법이 PIPELINING이다.

 

PIPELINING 이란 하나의 연결에서 다수의 응답/요청을 할 수 있는 기법이다.

하지만 이 또한 문제점이 존재한다.

 

예를 들어 하나의 연결에 세 개의 이미지를 요청을 한다고 가정하면 (Image A, Image B, Image C)

해당 과정은 순차적으로 이루어지며

Image A에서 전송 지연이 발생한다면 Image B, Image C는 Image A의 요청이 끝날 때까지 기다려야 한다.

 

이와 같은 전송 지연을 HTTP의 Head of Line Blocking이라 한다.


RTT (Round Trip Time) 증가

 하나의 연결당 하나의 요청을 처리하기 때문에 매 요청마다 connection을 만드는 것이 불가피하고

이로 인해서 TCP의 3-way handshake가 반복적으로 일어나게 된다.

https://sleepyeyes.tistory.com/4

 

TCP 3 Way-Handshake

3 Way-Handshake 란 전송 제어 프로토콜(TCP)에서 통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정, 방법이다. 더 자세하게 설명하기전에 상위 개념부터 간단히 알아보자. 먼저 네트워크란 데이터를..

sleepyeyes.tistory.com

이로 인해서 불필요한 RTT가 반복적으로 일어나며 성능을 저하시키는 원인이 된다.


HTTP/2

"HTTP/2 is a replacement for how HTTP is expressed “on the wire.” It is 
not
 a ground-up rewrite of the protocol; HTTP methods, status codes and semantics are the same, and it should be possible to use the same APIs as HTTP/1.x (possibly with some small additions) to represent the protocol. The focus of the protocol is on performance; specifically, end-user perceived latency, network and server resource usage. One major goal is to allow the use of a single connection from browsers to a Web site."
  1. HTTP/2 프로토콜은 클라이언트와 서버 간의 연결에서 HTTP가 어떻게 표현하는지로 대체되었다.
  2. 프로토콜의 초점은 오직 퍼포먼스에 있다.
  3. 커넥션을 한번 맺으면 최대한 길게 사용하길 권고

Multiplexed Streams

 

 

 

 

 

 

한 커넥션으로 동시에 여러 개의 메시지를 주고받을 수 있다.

이전에 언급하였던 HTTP/1.1의 PIPELINING의 개선이라고 볼 수 있다.

 

 

 

 

 

 

Stream Prioritization

클라이언트가 요청한 요청 본문에 CSS File , Image B, Image C 가 있다고 가정하자

 

CSS File의 전송이 늦어지는 경우 HTTP/2는 리소스 간의 우선순위를 판단하여 우선순위가 높은 것을 먼저 처리하여 지연을 줄인다.


Server Push

서버에서 클라이언트에서 요청하지 않은 리소스를 전송할 수 있다.

 

예를 들어서 클라이언트에서 css, image.. 등 여러 리소스가 포함되어있는 HTML를 전송한다면

HTTP/1.1에서는 요청한 HTML 문서를 수신 후 해당 문서를 해석한 다음 필요한 리소스를 재 요청한다.

반면 HTTP/2에서는 Server Push 기법으로 클라이언트가 요청하지 않았지만 필요한 리소스를 클라이언트에 요청하지 않고 PUSH 한다.

 

이는 클라이언트의 요청을 간소화시켜주기 때문에서 성능 향상을 이끌어 낸다.

이를 PUSH_PROMISE라고 하며 서버가 전송한 리소스에 대해서 클라이언트는 재전송하지 않는다.

 


Header Compression

HTTP/2는 header 정보를 간소화하기 위해서 Header Table과 Huffmas Encoding 기법을 사용하여 중복된 Header정보를 간소화한다.

 

예를 들어서 아래와 같이 두 개의 요청이 존재한다고 가정해보자

 

 

두 개의 요청이 중복되는 내용이 있다는 것을 볼 수 있다.

 

중복되는 내용이 있음에도 불구하고

HTTP/1.1은 중복되는 내용을 그대로 전송한다.

 

반면 HTTP/2는 Static/Dynamic Header Table 기법을 사용하여 중복 Header를 검출하고

 

중복되지 않는 Header 정보는 Huffman Encoding기법으로

인코딩하여 처리한다.

 

 

Http/2 전송 방식


HTTP/1.1과 HTTP/2의 성능 비교

성능 비교 측면에서는 여러 가지 외부 요인들로 정확한 측정이 힘들지만

일반적인 경우 HTTP/2만 사용하더라도 HTTP/1.1에 비해 15~50%의 속도가 향상된다고 한다.

 

 

 

 

 

왼쪽 이미지는 동일한 용량 및 개수의 이미지를 로딩시켜

HTTP/1.1과 HTTP/2의 속도를 비교한 결과이다.

 

효율성 차이가 90% 이상이 나는 것을 볼 수 있다.

 

 

 

 

 

 

 

 

 

 


References

https://www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-http2/

 

나만 모르고 있던 - HTTP/2 | Popit

자그마치 15년여의 시간을 웹 통신 프로토콜의 절대권좌의 자리에 올라 꿋꿋이 버텨오던 HTTP/1.1에 대한 문제점과 HTTP/2 프로코톨의 특징에 대해 살펴 보겠습니다.

www.popit.kr

https://jins-dev.tistory.com/entry/HTTP2-%ED%8A%B9%EC%A7%95%EB%93%A4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC

 

HTTP/2 특징들에 대한 정리

HTTP/1.1 은 변해가는 웹서비스 환경에서 발생하는 상당한 규모의 문제들을 처리하는데 훌륭한 방법을 제시해주었고, 그 결과 성능적으로나 서비스적으로나 변해가는 웹생태계에 걸맞는 진화를 보여주었다. 하지만..

jins-dev.tistory.com

 

'CS > Network' 카테고리의 다른 글

(Network) TCP vs UDP  (0) 2020.05.10
(Network) SSL 인증서  (0) 2020.04.28
(Network) HTTPS와 SSL 인증서(2) - 공개키  (0) 2020.04.28
(Network) HTTPS와 SSL 인증서(1) - 대칭키  (0) 2020.04.28
(Network) HTTP/1.0 VS HTTP/1.1  (0) 2020.04.19