HTTP는 인터넷에서 데이터를 주고받기 위해 사용되는 프로토콜이다. 클라이언트와 서버 간의 통신을 담당하며, 웹 브라우저와 웹 서버 간의 데이터 전송을 위해 주로 사용된다.
RTT (Round Trip Time)
- 패킷이 목적지까지 도달하고 나서 다시 출발지로 돌아오는 시간
이를 해결하기위해 HTTP/1.1 등장
HTTP/1.1은 HTTP/1.0의 단점을 보완한 프로토콜입니다.
Connection: keep-alive
헤더가 있었으나 선택 사항이었음 Host
헤더를 필수화하여네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
HTTP 요청 또는 응답에서 헤더의 크기가 크고 반복적으로 전송되어 네트워크 성능에 악영향을 주는 현상
HTTP/2.0은 HTTP/1.1의 성능 문제 해결과 효율성 개선을 목표로 탄생한 프로토콜입니다.
메시지를 바이너리 프레임(Binary Frame)으로 인코딩하여 전송.
바이너리 프레이밍 계층을 도입하여 헤더와 바디를 명확히 레이어 단위로 구분.
데이터 파싱 및 전송 속도 향상.
오류 발생 가능성 감소.
하나의 TCP 커넥션에서 여러 개의 메시지 스트림을 동시에 주고받을 수 있음
응답 순서에 상관없이 독립적으로 처리 가능
HTTP/1.1의 Connection Keep-Alive, 파이프라이닝(Pipelining), HOLB(Head of Line Blocking) 문제를 해결함
네트워크 사용 효율이 높아지고 TCP 커넥션 수를 줄일 수 있음
클라우드 환경에서 네트워크 비용 절감에 유리함
HTTP/1.1은 클라이언트가 요청한 리소스만 다운로드 가능함
HTTP/2.0은 클라이언트의 요청 없이 서버가 리소스를 미리 푸시할 수 있음
예를 들어, 클라이언트가 HTML 파일을 요청하면 서버는 HTML에 포함된 CSS, JS 파일을 함께 전송함
별도의 요청 없이 필요한 리소스를 미리 전달받을 수 있음
HTTP/1.x는 헤더 크기가 크고 중복 필드가 많아 전송이 비효율적임
HTTP/2는 HPACK 방식의 헤더 압축을 사용함
허프만 코딩 알고리즘 기반으로 압축 처리함
중복된 헤더는 인덱스로 전송하고, 새로운 값은 압축 인코딩함
헤더 전송 크기를 줄여 통신 효율을 높임
HTTP/3.0은 TCP가 아닌 UDP 기반의 전송 프로토콜인 QUIC 위에서 동작하는 HTTP 프로토콜이다. HTTP/2.0의 성능적 장점을 유지하면서 TCP의 구조적 한계를 극복하는 데 중점을 두고 설계되었다.
QUIC
- Google이 개발한 UDP 기반 전송 계층 프로토콜
- TLS, TCP, HTTP 기능을 통합하여 설계됨
- RFC 9000에 의해 표준화
- 빠른 연결 수립, 스트림 독립성, 내장 보안 기능 등 제공
기존 TCP 대체 가능성을 가진 차세대 전송 프로토콜
Reference
- https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95
- https://velog.io/@minu/HTTP1.0-HTTP1.1-HTTP2-and-QUIC
- https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-20-%ED%86%B5%EC%8B%A0-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%A0%9C%EB%8A%94-%ED%99%95%EC%8B%A4%ED%9E%88-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90
- https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-30-%ED%86%B5%EC%8B%A0-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%A0%9C%EB%8A%94-%ED%99%95%EC%8B%A4%ED%9E%88-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90