본문 바로가기
컴퓨터공학/네트워크

[웹] HTTP/1.0 HTTP/1.1 HTTP/2, HTTP/3 차이

by 독서왕뼝아리 2023. 5. 18.

 

HTTP
  • HTTP/0.9

GET 메서드만 지원됐고 헤더가 없었다.

  • HTTP/1.0

기본적으로 한 연결당 하나의 요청을 처리하게 설계되었다. 따라서 요청을 할 때마다 클라이언트와 서버가 TCP 3-handshake를 수행했기 때문에 RTT(Round Trip Time, 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간)가 증가하는 단점이 생겼다.
 
또, GET, POST, HEAD 메서드만 지원됐다. (HEAD는 헤더 정보만 전송된다.)
 

  • HTTP/1.1

HTTP/1.0의 단점(매번 연결해야 함)을 해결하기 위해 발전한 버전이다. keep-alive 옵션으로 여러 번 송수신할 수 있게 바뀌었다. 처음 TCP 연결 후 지정한 timeout 동안 연결을 지속한다.

파이프라이닝 기능이 지원된다.
 
* 파이프라이닝
보통 Pipelining과 대조되는 것이 stop and wait 방식이다. stop and wait는 송신자가 요청을 보내면 응답을 받아야지만 다음 요청을 보낼 수 있다. 하지만 파이프라이닝 기능은 송신자가 응답을 받지 않아도 요청을 보낼 수 있는 것을 말한다. 
 
HTTP/1.1에서 클라이언트와 서버의 컨넥션을 유지하게 됐으므로 파이프라이닝을 통해 더 효율적인 통신이 가능해졌다!
 
하지만 문서 안에 포함된 다수의 리소스(이미지, 동영상 css파일 등)를 처리하려면 요청할 리소스 개수에 비례해 대기 시간이 길어지는 단점이 있다.
 
 

  • HTTP/2

2015년에 출시됐다. HTTP/1과 가장 큰 차이점은 멀티플렉싱을 사용한다는 점이다. 즉 여러 리소스를 한 번에 요청할 수 있게 됐다. 중복 헤더 제거헤더 압축을 이용해 패킷 크기가 매우 작아졌다!

multiplexing과 demultiplexing

 
예를들어 클라이언트가 서버에 메인화면 GET 요청을 했다. 메인화면을 나타내기 위해 html 3개, css 2개, js 2개 리소스가 필요하다고 가정하자.
 
다시 HTTP/1으로 돌아가면 html 3개 요청 후 응답을 받을 때까지 기다리고, css 요청 후 기다리고, js 요청 후 기다려서 모든 리소스를 받는 작업을 수행했다. 파이프라이닝으로 비동기 같아 보이지만 동기로 처리되는(?) 방식이다. 이런 이유로 지연이 되는 게 HOL Blocking이라고 한다.
HOL Blocking (Head Of Line Blocking)
같은 큐에 있는 데이터 중 첫 번째 데이터의 처리 시간이 길수록 뒤의 데이터의 지연 시간이 길어져 성능이 저하되는 현상
 
하지만 HTTP/2는 멀티플렉싱 기능 덕분에 html, css, js를 한꺼번에 요청하고 한꺼번에 응답받을 수 있다!
 
Server Push라는 요청하지 않은 리소스를 서버가 자체적으로 전달하는 기능을 제공한다.
 
 

  • HTTP/3

TCP 기반 통신인 HTTP/2는 hand-shaking을 수행해야 하는 고질적인 문제가 있었다. 이런 연결 시간으로 딜레이 되는 시간을 줄이기 위해 HTTP/3는 UDP 기반인 QUIC(구글이 만듦) 프로토콜을 사용하여 통신한다.

 

HTTP는 TCP위에서 정의된 프로토콜로 알고 있는데 이게 무슨 소리인가! 나무위키 피셜 원래는 HTTP-over-QUIC이란 이름이었는데 표준화하는 단체에서 HTTP/3로 변경할 것을 제안했다고 한다.

 

https://medium.com/monday-9-pm/%EC%B4%88%EB%B3%B4%EA%B0%9C%EB%B0%9C%EC%9E%90-http3-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-98da26749cb9