쵼쥬 2022. 6. 15. 21:31

HTTP/1.0 

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

-> 서버로부터 파일을 가져올 때마다 TCP의 3-way handshake를 계속 수행

-> RTT(패킷이 목적지에 도달하고 나서 다시 출발직로 돌아오기까지 걸리는 시간) 증가 문제 

 

RTT 증가를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩 사용

 

HTTP/1.1

매번 TCP를 연결하는 것이 아니라 한번 TCP를 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 변경

(1.0에도 keep-alive가 있었지만 표준화 되어있지 않았음)

 

TCP의 3-way handshake가 한번 발생한 다음부터 발생하지 않지만 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해서 대기 시간이 길어지는 단점이 있다.

헤더에 많은 메타데이터가 들어있어서 무거웠다.

 

HTTP/2

SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 빠르게 할 수 있으며 멀티플레깅, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜

 

멀티플레싱 - 여러개의 스트림을 사용하여 송수신하는 것. 특정 스트림이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림을 멀쩡하게 동작할 수 있다.

 

3-way handshake가 아닌 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있다.

-> HTTP/1.x에서 발생하는 HOL Blocking 을 해결

 

헤더 압축

 

서버 푸시

 

HTTPS

HTTP/2는 HTTPS 위에서 동작한다. 

HTTPS는 어플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청이다.

통신을 암호화

 

 

HTTP/3

TCP기반이 아닌 UDP기반으로 동작