HTTP : 웹상에서 서버와 클라이언트간 통신을 위한 프로토콜
HTTP 0.9~2 버전 까지는 TCP 사용
HTTP 1.0 : 요청 하나당 커넥션 1개 -> 매번 새로운 연결로 성능 저하, 서버 부하 비용 증가
HTTP 1.1 : Persitent Connection (지정한 timeout 동안 커넥션을 닫지 않는 방식)
-> 파이프라이닝 도입 : 하나의 커넥션에서 응답을 기다리지 않고 순처적인 여러 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로 지연 시간을 줄이는 방법
-> Head Of Line Blocking 문제 : 첫번째 요청이 와도 서버에서 처리하는 시간이 오래 걸리면 2, 3번째 요청도 기다려야 함
-> 연속된 요청 : 헤더 구조의 중복
HTTP2 : 기존 버전의 성능 향상에 초점을 맞춘 프로토콜(표준의 대체가 아닌 확장)
-> HTTP 메시지 전송 방식의 변화
--> 기존 : 텍스트 형태 -> 바이너리 프레이밍 계층 -> 파싱, 전송속도 증가, 오류 발생 가능성 감소
--> 커넥션 안에 스트림 이라는 흐름에 프레임들이 들어가서 요청과 응답 발생
-> 요청과 응답 다중화 가능(Head Of Line Blocking 해결)
-> Stream Prioritizaiton : 리소스간 우선 순위를 설정 가능
-> Server Push : 클라이언트가 요청하지 않은 리소스를 서버에서 알아서 보냄
-> 헤더 압축 : 헤더의 크기를 줄여 페이지 로드 시간 감소(중복된것 인덱스만 뽑고, 중복되지 않은것만 허프만 인코딩)
QUIC : 전송 계층 프로토콜(UDP 기반)
-> 전송 속도 향상 : 첫 연결 설정에서 필요한 정보와 함께 데이터 전송 -> 연결 성공 시 설정을 캐싱하여 다음 연결 때 바로 성립 가능
-> Connection UUID라는 고유한 식별자로 서버와 연결 -> 커넥션 재수립 필요X
-> TLS 기본 적용, IP Spoofing / Reply Attack 방지
-> 독립 스트림 : 향상된 멀티플렉싱 기능
-> HTTP 2.0도 TCP Head Of Line Blocking 이슈 있긴 함
HTTP3 : QUIC을 바탕으로 HTTP3 나옴
-> 구글 이미 HTTP3-Quic 사용