HTTP/1.1, HTTP/2, QUIC

Y39·2023년 4월 8일
0

toBeProgrammer

목록 보기
85/88

HTTP

: 서버와 클라이언트 간 통신을 위한 프로토콜

HTTP/0.9~2.0

: TCP 통신을 사용

HTTP 0.9

  • Get만 있었고, header도 없었음, 너무 심플

HTTP 1.0

  • header, 상태 코드, content-type 생김
  • 매번 새로연결해서 성능이 매우 좋지 않음

HTTP 1.1

  • Persistent Connection 지정한 timeout동안 커넥션을 닫지 않음
  • Pipelining
    • 커넥션에서 응답을 기다리지 않음
    • 순차적으로 여러 요청을 보냄 → 순차적으로 응답받음
    • 단점: 여러개를 보낼 수 있지만, 같이 보내는 애들이 오래걸리면 다 같이 기다려야함
    • 요청들의 중복으로 데이터가 쓸데 없이 커짐

HTTP 2.0

  • 성능 향상에 초점을 맞춤
  • 기존과 다른 메시지 전송 방식
    • 바이너리 프레이밍 계층 사용
      • 파싱, 전송 속도 향상
      • 오류 발생 가능성 낮아짐
      • 프레임 단위로 전송이 되어서 순서가 사라짐 ⇒ multi 전송 가능
  • Stream Prioritization : 리소스 간 우선 순위 설정 가능
    • 먼저 보낼 것을 정해서 미리 보내기
  • Server Push
    • 요청이 완료되기 전에 리소스를 미리 보냄
  • Header Compression
    • 헤더의 크기를 줄여서 페이지 로드 시간 감소
      • Dynamic table을 이용 ⇒ 보내야하는 내용을 줄여줌
        • 중복: 인덱스만 보냄
        • 중복 x : 내용 포함

Quic + HTTP 3.0

  • 전송 계층 프로토콜
  • google에서 만들었음
  • UDP 프로토콜
    • TCP는 신뢰성이 있지만, 시간 지연을 줄이기 힘들다.
    • UDP는 개발자가 확장할 여지가 많음
  • Connection UUID
    • 커넥션 재수립 필요X
    • ip가 변경되더라도 Connection UUID만 일치하면 계속 연결
  • 독립 스트림
    • 멀티플렉싱 기능 향상
    • 기존 TCP의 Head Of Line Blocking 문제에 대한 방안
      • 하나의 chain에서 문제가 생기면 다른 통신들까지 지연됨
      • quic은 독립 chain을 통해 전송해서 지연이 없어짐
profile
System.out.print("Bold")

0개의 댓글