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기반으로 동작
'CS > 네트워크' 카테고리의 다른 글
IP 주소 (0) | 2022.05.30 |
---|---|
TCP/IP 4계층 모델 (0) | 2022.05.29 |
네트워크의 기초 (0) | 2022.05.29 |