Network

HTTP 버전별 특징

ju_young 2023. 5. 25. 13:13
728x90

HTTP/1.0

  • 기본적으로 한 연결당 하나의 요청을 처리한다.
  • 서버로부터 파일을 가져올 때마다 3-way handshaking이 계속 일어나 RTT가 증가한다.
RTT: 패킷이 목적지에 도달하고 다시 돌아오기까지 걸리는 왕복 시간
  • RTT의 증가를 해결하기 위한 방법으로 "이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩"이 있다.

HTTP/1.1

  • keep-alive라는 옵션이 적용되어 한 번의 3-way handshaking으로 여러 파일을 송수신할 수 있다.
  • HOL(Head Of Line) Blocking: 같은 큐에 있는 패킷 중 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
  • 헤더에 많은 메타데이터가 포함되어 무겁다

HTTP/2

  • 여러 개의 스트림을 사용하여 송수신할 수 있는 멀티플렉싱이 지원되어 병렬로 여러 요청을 처리함으로써 HTTP/1.x의 문제인 HOL Blocking을 해결
  • 허프만 코딩 압축 알고리즘을 사용하여 크기가 큰 헤더를 압축
허프만 코딩: 빈도가 높은 정보는 적은 비트 수를 사용하고 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현
  • 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다. 예를 들어 서버에 html 파일을 요청했다면 그 안에 들어 있던 css 파일을 서버에서 푸시할 수 있다. 이를 서버 푸시라 한다.

HTTP/3

  • QUIC라는 계층 위에서 돌아가며 UDP 기반으로 돌아간다.
  • TCP를 사용하지 않기 때문에 통신을 시작할 때 3-way handshaking 과정을 거치치 않아도 된다. 따라서 첫 연결에 1-RTT만 소요된다. 
728x90