GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
커넥션 하나당 요청 하나와 응답 하나만 처리 가능하여, 매우 비효율적이며 서버 부하도 문제
HTTP의 첫 번째 표준화 버전인 HTTP/1.1은 HTTP/1.0 이후 불과 몇 달 뒤인 1997년 초에 발표됨
HTTP/1.1은 모호함을 명확하게 하고 많은 개선 사항들을 도입
Host 헤더 덕분에, 동일 IP 주소에 다른 도메인을 호스트하는 기능이 서버 배치가 가능해졌습니다.Host: example.com
HTTP 요청의 일부
클라이언트가 웹 서버에게 요청을 보낼 때 해당 요청이 어떤 도메인의 리소스를 타겟으로 하는지를 알려주는 역할
이를 통해 하나의 IP 주소에서 여러 개의 도메인 이름을 가진 웹 사이트를 동시에 호스팅 가능
3-Way Handshake의 반복 감소와 여전히 존재하는 문제
비록 HTTP/1.1이 3-way handshake의 반복을 줄였지만, 여전히 지연 시간의 다른 요소들이 존재합니다:
Initial Connection Setup: 첫 연결 설정 시에는 여전히 3-way handshake가 필요합니다.
RTT의 영향: 연결을 설정하는 데 걸리는 기본적인 RTT는 여전히 존재합니다.
HOL 블로킹: 앞서 언급한 Head-of-Line 블로킹 문제가 HTTP/1.1에서도 존재합니다.
결론
HTTP/1.1의 연결 유지 기능(Persistent Connection)은 3-way handshake의 빈도를 줄여서 지연 시간을 줄이는 데 기여합니다. 그러나 네트워크 지연 시간(Latency)는 여러 요소에 의해 영향을 받으며, 초기 연결 설정 시의 RTT와 요청 처리 지연 등은 여전히 존재합니다. HTTP/2와 같은 새로운 프로토콜들은 이러한 문제들을 해결하기 위해 멀티플렉싱과 헤더 압축 등을 도입하여 네트워크 성능을 더욱 향상시킵니다.
HTTP/2.0은 다중화를 지원하여 단일 연결을 통해 동시에 여러 요청/응답을 보낼 수 있습니다. 이렇게 하면 HOL 차단 문제가 제거되고 전체 처리량이 향상됩니다.

서버 푸시를 사용하여 명시적인 요청을 기다리지 않고 서버가 사전에 리소를 클라이언트에 보내 대기 시간을 줄인다.

HTTP/2.0은 헤더 압축을 사용하여 요청 및 응답 헤더의 크기를 줄여 대역폭 활용도를 높였다.
추가적인 Binary Encoding
Binary Framing 계층을 추가해서 보내는 메시지를 프레임(frame)이라는 단위로 분할하며 추가적으로 바이너리로 인코딩을 한다.
바이너리 형식 사용으로 파싱 속도 및 전송 속도가 빠르고 오류 발생 가능성이 낮아짐

등장 배경 : HTTP2.0 으로 성능이 향상되었지만, TCP 기반 위에서 동작하기에, 핸드쉐이크 과정에서의 지연시간과 패킷이 유실되거나 오류가 있을 때 패킷을 재전송하는 HOL이 발생한다. TCP로 인터넷 통신을 하는 것이 문제인 것이다.
프로토콜 변경 : HTTP/1.1 HTTP/2.0의 개념을 유지하지만, 전송 레이어에 TCP 가 아닌 UDP기반인 QUIC(Quick UDP Internet Connections) 프로토콜을 사용한다.
UDP(User Datagram Protocol)은 데이터그램 방식을 사용하는 프로토콜. 패킷의 목적지만 정해지면 중간 경로는 신경쓰지 않는다.
장점
연결 시 레이턴시 감소 (빠른 연결)
HOLB (Head of Line Blocking) 해결
보안 강화
핸드쉐이크에 대한 QUIC의 새로운 접근 방식으로 기본적인 암호화를 제공하기 때문에 공격을 완화하는 데 도움됨