HTTP Versions
@참고 자료)
HTTP 의 버전별 특징을 정리한 문서입니다.
1. HTTP/0.9 - 원 라인 프로토콜¶
HTTP 초기 버전에는 버전 번호가 없었습니다. HTTP/0.9는 이후에 차후 버전과 구별하기 위해 0.9로 불리게 됐습니다. HTTP/0.9는 극히 단순합니다. 요청은 단일 라인으로 구성되며 리소스에 대한 (프로토콜, 서버 그리고 포트는 서버가 연결되고 나면 불필요로 하므로 URL은 아닌) 경로로 가능한 메서드는 GET이 유일했습니다.
응답 또한 극도로 단순합니다. 오로지 파일 내용 자체로 구성됩니다.
헤더도 없고, 응답 코드도 없습니다. 메서드는 GET 이 유일했습니다.
2. HTTP/1.0¶
HTTP/1.0 부터 조금은 익숙한 형태의 요청과 응답이 이루어 졌습니다.
- HTTP 버전 정보나, 응답 상태 코드 같은 것이 Start-Line 에 추가되었습니다.
- HTTP 헤더 개념이 추가되었습니다.
- HTTP의 Content-Type 헤더 스펙으로 인해 HTML 파일 외 다른 문서를 전송할 수 있게 되었습니다.
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>
3. HTTP/1.1¶
- Persistent Connection 스펙 - Connection 을 재사용하는 기능이 추가되었습니다. (keep-alive)
- pipelining 스펙 - 첫 번째 요청에 대한 응답이 완전히 전송되기 이전에 두번째 요청 전송을 가능케 하여, 커뮤니케이션 (네트워크) 레이턴시를 낮췄습니다.
- ETag, Last-Modified 등 - 추가적인 캐시 제어 메커니즘이 도입되었습니다.
- 현재 (2022) 가장 널리 활용되는 HTTP 버전입니다.
4. HTTP/2 - 더 나은 성능!¶
- 구글의 자체적인 SPDY (스피디) 프로토콜을 표준으로 채택한 것입니다.
- Binary Framing 계층의 도입으로 다양한 최적화 기술이 추가될 수 있었습니다.
- HTTP/1.1 의 pipelining 은 요청 순서와 응답순서가 동일해야 합니다. 따라서 Application 계층에서의 Head of Line Blocking 문제가 존재하였습니다.
- HTTP/2 는 Multiplexing 을 통해 병렬 요청이 동일한 커넥션 상에서 이루어 질 수 있도록 하였고, 순서를 제거하여 Applicaition 계층의 HOL 문제를 해결하였습니다.
- 허프만 인코딩을 통해 동일한 헤더를 압축 하였습니다.
- Server Push 메커니즘을 추가 하였습니다.
5. HTTP/3 - HTTP over QUIC¶
- 구글이 UDP 를 기반으로 만든 새로운 전송계층 프로토콜인 QUIC 를 기반으로 동작합니다.
- SSL 을 기본으로 지원합니다.
- 전송 계층에서의 HOL 문제를 해결하였습니다.
- QUIC 은 스트림을 전송계층에서 일급시민 (First-class citizen) 으로 도입하여!
- 클라이언트의 IP 가 변경되는 경우 빠르게 대처 할 수 있도록 고안되었습니다.
- Connection UUID 라는 개념을 도입하여!
Last update:
February 26, 2023
Created: December 21, 2022
Created: December 21, 2022