내용 출처
1. 우아한테크코스 - 🧃쿨라임의 HTTP/1.1, HTTP/2, 그리고 QUIC
2. HTTP의 진화
3. HTTP/1.x의 커넥션 관리
4. HTTP/2 소개
5. Does the QUIC handshake require compression to be fast?
HTTP 초기버전에는 버전 번호가 없었지만 차후 버전과 구별하기 위해 0.9로 불리게 됨
GET /mypage.html
<HTML>
A very simple HTML page
</HTML>
요청 메시지가 한줄에 불과했으며, 메서드 또한 GET 밖에 없었음 따라서 이를 One-Line Protocol이라고 부르기도 했다. 심플했지만 그만큼 기능이 지나치게 제한적이었다.
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
GET /myimage.gif 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>
200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)
버전 정보
가 각 요청
에서 전송되기 시작 (HTTP/1.0)상태 코드
가 응답
의 시작 부분에 전송되어 브라우저가 요청의 성공, 실패 결과를 알 수 있게 됨헤더 개념
이 요청
과 응답
모두에 도입되어, 메타데이터 전송과 프로토콜 유연화 및 확장이 가능하도록 함Content-Type
이 추가 되어 HTML 파일 외에 다른 문서 전송 기능이 추가됨한계 1. 단기 커넥션: Connection 하나 당 요청 하나와 응답 하나만 처리 가능
: 매번 새로운 연결이 필요해서 성능이 저하되고 서버 부하 비용이 증가
1997년 1월 공개된 HTTP의 첫 번째 표준 버전, HTTP/1.0은 공식적 표준은 아니었다.
HTTP/1.1은 공개 이후 15년 넘게 안정성을 유지하며, 다양한 기능들을 시도함
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
(content)
Short-lived Connection
의 단점을 보완하기 위해 Persistent Connection
과 Pipelining
을 도입한계 1. Head of Line Blocking
: 선행 요청이 서버에서 처리 시간이 오래걸릴 경우, 이후 요청은 계속 기다려야 하는 상황
한계 2. Header 구조의 중복
: Header 구조에 중복된 내용이 많음에도 같은 내용을 요청마다 다시 보내야함, 따라서 주고받는 데이터 양이 불필요하게 커지는 단점이 있음
2015년 5월에 공식적으로 표준화됐으며, 기존 HTTP/1.1의 성능 향상을 통해 표준의 대체가 아닌 기능 확장을 중심으로 함, 2021년 3월 기준 약 50%의 웹사이트가 채택
용어 정리
1. 스트림: 연결 내에서 전달되는 바이트의 양방향 흐름으로, 하나 이상의 메시지가 전달될 수 있음
2. 메시지: 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스
3. 프레임: HTTP/2에서의 통신의 최소 단위로, 각 최소 단위에는 하나의 프레임 헤더가 포함되어서 프레임이 속하는 스트림을 식별
HTTP는 UDP를 기반으로하는 QUIC을 사용하여 UDP의 빠른 전송속도의 이점을 챙기며 신뢰성있는 통신을 추구한다.