HTTP1.1 vs HTTP2.0

면접용 답변

HTTP 1.1은 매번 요청을 보낼 때마다 연결을 했다가 끊는 1.0의 단점을 보완한 것으로, 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신 할 수 있는 장점이 있습니다. 반면, 요청의 순서와 응답 순서가 같아야하기 때문에, 앞선 요청이 블락당하면 다음 들어온 요청도 블락당하여 전송되지 않는 Head of line blocking 문제가 있습니다. 또한, 한 번에 많은 요청을 보내면서 헤더의 많은 부분이 중복되는 오버헤드 문제가 있습니다. 이러한 단점을 보완하기 위해 만든 것이 HTTP 2.0입니다. HTTP 2.0은 멀티플렉싱 방식을 이용하여 하나의 커넥션에 여러 개의 스트림을 전송함으로써 HOL문제를 해결합니다.

개념 설명

HTTP란?

  • 클라이언트가 웹사이트를 보려면?

    • 서버의 80번 포트를 사용하여 HTTP 통신을 함

    • 클라이언트가 HTTP request를 보내고 서버가 HTTP response를 반환

HTTP/1.0버전

  • 요청을 보낼 때마다 연결했다 끊는 작업을 반복함

  • 기본적으로 한 연결 당 하나의 요청을 처리하도록 설계됨

HTTP/1.1버전

  • keepalive 기능 추가 → 매번 연결 수립과 끊기를 하지 않아도됨

    • keepalive: 연결을 한 번 수립하면 데이터 교환을 마칠 때까지 유지하고, 데이터 교환을 모두 끝내면 연결을 끊음

    • keepalive는 요청을 순서대로 처리함

      • 문제: 이전 요청을 처리하는데 시간이 길어지면 다음 요청에 대한 처리가 늦어짐Image

HTTP/2버전

  • HTTP/1.1버전의 문제를 보완한 것

  • HTTP/2 버전은 요청을 보낸 순서대로 응답을 반환하지 않아도됨 → 콘텐츠를 빠르게 표시할 수 있음Image - 1,2,3 순서로 요청을 보냈는데 2,3,1 순서로 응답

HTTP 1.1 문제점

  • 커넥션 하나 당 하나의 요청을 처리하도록 설계 → 동시에 리소스를 주고받는게 불가능

    • 요청과 응답이 순차적으로 이루어짐

  • HOL 문제점: 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 가능성

  • RTT 증가: 커넥션 하나에 요청 한 개를 처리하는 특성 → 매번 요청 별로 Connection을 만들게됨

    • 3-way handshake 반복적으로 발생

    • 불필요한 RTT 증가와 네트워크 지연을 초래하여 성능을 지연

  • 무거운 헤더: 매 요청마다 중복된 헤더 값을 전송하게 되며, 서버 도메인에 관련된 쿠키 정보도 헤더에 함께 포함되어 전송됨

HTTP 1.1 개선방법

  • 구글의 SPDY: 구글은 더 빠른 웹을 실행하기 위해 Throughtput 관점이 아닌 Latency 관점에서 HTTP를 고속화한 SPDY(스피티)라 불리는 새로운 프로토콜을 구현함

    • 이게 HTTP 2.0의 근간이 되는 프로토콜임

HTTP 2.0

  • HTTP 1.1에서 데이터 서식이 변환됨

    • 기존 HTTP와 호환이 안됨

  • 데이터 서식의 변화=데이터 교환 방식의 변화

    • HTTP 1.x: 헤더를 텍스트로 처리함 → 파싱 과정에서 개행을 처리하고 필요한 정보 추출

    • HTTP 2.0: 바이너리 프레임 이용 → 별도의 전처리 없이 데이터가 양방향 흐름으로 처리될 수 있음

  • 프레임: HTTP2.0 통신 상의 제일 작은 정보 단위

    • 각 프레임은 하나의 프레임 헤더를 가짐

  • 스트림: 하나 이상의 메세지를 의미

    • 클라이언트와 서버 사이에 맺어진 연결을 통해 양방향으로 주고받는 하나 이상의 메시지Image

→ 멀티플렉싱으로 하나의 커넥션에 여러 개의 스트림 전송 가능

Last updated