computer science

HTTP 진화 (HTTP/0.9 -> HTTP/1.0 -> HTTP/1.1 -> HTTP/2.0 -> HTTP/3.0 - QUIC)

yjs3819 2023. 5. 13. 18:48
728x90

웹개발을 한다면 알아야할 프로토콜인 HTTP.
시대에 흐름에 맞게 어떻게 진화해 왔는지 알아보자.

스스로 공부하고 정리한 내용으로 잘못된 내용이 있을 수 있습니다. 잘못된 내용이 있으면 지적 바랍니다. 🙂

HTTP/0.9

  • 최초의 HTTP 버전이다.
  • 원-라인 프로토콜이라고도 한다.
    • 요청이 단일 라인으로 구성되어 있어서.

request

GET /mypage.html

response

<HTML>
A very simple HTML page
</HTML>
  • 요청과 응답 메시지를 보면 매우 simple하다.
    • GET메서드만 존재
    • 별다른 헤더도 없음
    • HTML파일만 전송가능

-> 확장성 부족

따로 버전이 0.9로 시작한게 아니고, HTTP 1을 기준으로 이전의 버전이라는 것을 의미한다

HTTP/1.0

  • HTTP/0.9는 확장이 어렵기에 만들어진 버전.
  • 1996년에 나옴
  • 다양한 헤더 정보 추가
    • 특히 Content-type으로 다양한 종류의 파일을 전송가능(HTML만 전송가능하던 HTTP/0.9와의 큰 차이가 존재)
  • 1 request 1 response in 1 TCP connection
    • 하나의 TCP 커넥션에서 1개의 요청당 1개의 응답만이 올수 있음. 새로운 요청을 하려면 새로운 TCP 커넥션을 수립해야함(3-way handshaking)
    • 참고로 HTTP/1.0은 TCP (transmission connection protocol) 프로토콜 위에서 동작 (osi 7 layer에 대해선 따로 설명하지 않겠다.)

request

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

response

GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)

-> 매 요청마다 TCP connection 수립하여 latency 높아 성능에 좋지 못함(개선 여지가 존재)

HTTP/1.1

  • 1997년 도입
  • keep-alive header를 통한 Persistence connection 가능
    • 새로운 요청을 하려면 TCP 커넥션을 매번 수립하는게 아닌, keep-alive에 지정된 timeout동안 TCP연결을 끊지않고 재사용한다.
    • HTTP/1.0의 latency큰 문제 해결
  • pipeling 도입
    • 첫번째 요청에 대한 응답이 완전히 수신되기 전에 두번째 요청전송 가능케함.
    • HTTP는 전송한 순서대로 수신받아야 하므로, 중간에 프록시 서버가 많다면 처리하기 힘들고, Head of line blocking 이슈로, 성능도 비약적으로 상승하진 않았다.

Head of line blocking이란 첫번재 요청에 대한 처리가 오래걸리면 두번째 요청, 세번째 요청,,. 그 이후의 요청도 처리되지 못하고 blocking되는 상황을 말한다.

no pipelining vs pipelining

  • persistenct connection에서의 둘간의 차이

pipelinging Head of line blocking

HTTP/2.0

  • 2015년 도입
  • binary 형태의 데이터로 파싱후 전송
    • 컴퓨터 친화적인 이진데이터이므로 성능 좋고, 안정성 높다.
  • multiplexing
    • 단일 TCP 커넥션 내에, 여러 요청 스트림을 보낼수 있는 HTTP 스트림 도입
    • HTTP/1.1 pipelining과 다르게, 각 스트림을 서로 독립적이라, 순서대로 전송하거나 수신할 필요없음
  • server push
    • polling(클라이언트가 서버로 주기적으로 데이터 요청)방식이 아닌, 새 데이터를 사용할수 있을 때마다 서버에서 클라이언트로 데이터 전송하는 푸시기능
  • Header 압축
    • 중복된 헤더를 압축하여, 송수신 하는 데이터를 줄여 latency 낮춤

  • www.naver.com 요청시 네트워크 콘솔 탭 -> HTTP/2.0 protocol 많이 사용하고있음.

multiplexing

pipelining vs multiplexing

HTTP/3.0 & QUIC

  • 2022년 도입
  • HTTP/0.9 ~ HTTP/2.0은 TCP 기반이지만 HTTP/3.0은 QUIC 기반
    • QUIC: Quick UDP internet Connection으로 google에서 만든 transport layer protocol
  • QUIC은 UDP + 구글이 신뢰도 있는 전송을 위해 다양한 기능 추가
  • QUIC은 Connection ID를 기반으로 데이터 송 수신
    • client의 네트워크 환경이 달라져도 Connection ID가 같다면 새로운 커넥션을 재조립하지 않아도 된다.

  • www.youtube.com 요청시 네트워크 콘솔 탭 -> HTTP/3.0 protocol 많이 사용하고있음.

QUIC - connection by connection ID

출처

mdn http 진화
http 1 -> http 2 -> http 3
[10분 테코톡] 🧃쿨라임의 HTTP/1.1, HTTP/2, 그리고 QUIC
Performance and Efficiency: Working with HTTP/3

728x90