Code States/TIL

[0406] 네트워크 기초 - HTTP 버전별 특징

ki1111m2 2023. 4. 6. 15:46
  • 0.9(1991년)
    • HTTP 초기 버전을 구분하기 위해 부르는 버전
    • 요청은 단일 라인으로 구성되며, 리소스에 대한 메소드는 GET만 존재함
    • 응답 또한 극도로 단순함(파일 내용 자체로만 구성됨)
    • HTTP 헤더도 없고, HTML 파일만 전송 가능함
  • 1.0(1996년)
    • HTTP 헤더 개념이 도입되어 요청과 응답에 추가됨
    • 메타 데이터를 주고 받고 프로토콜을 유연하고 확장 가능하도록 개선됨
    • 버전 정보와 요청 메소드가 함께 전송되기 시작함
    • 상태 코드 라인도 응답의 시작 부분에 추가되어 브라우저 요청의 성공과 실패를 파악할 수 있게 됨(해당 결과에 대한 로컬 캐시 갱신 등의 사용이 가능해짐)
    • Content-Type 도입으로 HTML 이외의 문서 전송이 가능해짐
    • 커넥션 하나당 요청 하나와 응답 하나만 처리 가능함
  • 1.1(1997년)
    • Persistent Connection 추가
      • 지정한 timeout 동안 커넥션을 닫지 않는 방법을 통해 커넥션의 사용성이 높아짐
    • Pipelining 추가
      • 앞 요청의 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내고 그 순서에 맞춰 응답을 받는 방식 등장함
      • 순차적으로 하나씩 요청 후 응답이 처리되는 기존 방식을 개선함
      • 하나의 커넥션에 여러 개의 요청이 들어 있을 뿐, 동시에 여러 개의 요청을 처리해 응답으로 보내주는 것은 아님(multiplexing 되지는 않음)
    • Head of Line Blocking(HOL)
      • 결국 앞 요처의 응답이 너무 오래걸리면 뒤 요청은 Blocking 되어버림
    • Header 구조의 중복
      • 연속된 요청의 헤더의 많은 중복이 발생
  • 2.0(2015년)
    • 기존 버전의 성능 향상에 초점을 맞춘 프로토콜
    • 표준의 대체가 아닌 확장(표준: 1.1)
    • HTTP 메시지 전송 방식의 전환
      • 기존 일반 텍스트 형식을 Binary Framing 계층을 추가하여 보내는 메세지를 프레임이라는 단위로 분할하여 추가적으로 바이너리로 인코딩 함
      • 바이너리 형식 사용으로 파싱 속도 및 전송 속도가 빠르고 오류 발생 가능성이 낮아짐
    • Multiplexing Streams
      • 구성된 연결 내에 전달되는 바이트의 양방향 흐름을 의미하는 Stream으로 요청/응답이 교환됨(하나의 커넥션 안에 여러 개의 Stream 존재 가능)
      • 메세지가 이진화된 텍스트인 프레임으로 나뉘어 요청마다 구분되는 Steam을 통해 전달됨
      • 프레임이 각 요청의 Stream을 통해 전달되며, 하나의 커넥션 안에 여러 개의 Stream을 가질 수 있게 되어 다중화가 가능해짐
      • Stream을 통해 각 요청의 응답의 순서가 의미 없어져 HOL Blocking이 자연스럽게 해결됨
    • Stream Prioritization
      • 리소스간 우선순위를 설정하는 기능
      • Stream에 우선순위를 부여해서 인터리빙되고 전달하는 것이 가능해짐
    • Server Push
      • 단일 클라이언트 요청에 여러 응답을 보낼 수 있는 특징을 통해 Sercer에서 Client에게 필요한 추가적인 리소스를 Push 해주는 기능
    • Header Compression
      • 요청과 응답의 헤더 메타데이터를 압축해서 오버헤드를 감소
      • 전송되는 헤더 필드를 static dynamic table로 서버에서 유지
      • 이전에 표시된 헤더를 제외한 필드를 허프만 인코딩을 수해해서 데이터를 압축
    • 각 요청마다 Stream으로 구분해서 병렬적으로 처리하지만, 결국 이에는 TCP 고유의 HOL Blocking이 존재함
    • 서로 다른 Stream이 전송되고 있을 때, 하나의 Stream에서 유실이 발생하거나 문제가 생기면 결국 다른 Steram도 문제가 해결될 때까지 지연되는 현상이 발생하기 때문
  • 출처