HTTP
HTTP의 진화에 대하여 알아봅시다
HTTP란
Hyper Text Transfer Protocol으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜
웹에서 이루어지는 모든 데이터 교환의 기초로, 클라이언트-서버 프로토콜로, 수신자 측에 의해 요청이 초기화 되는 프로토콜이다.
HTTP는 애플리케이션 계층의 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 이론상으로 무엇이든 사용할 수 있다. 높은 확장성으로 문서 뿐만이 아닌, 이미지, 비디오, 폼의 결과 전송등도 할 수 있다.
HTTP/0.9
1991년에 나왔으며 초기에는 버전이 존재하지 없었는데 구별하기 위해 추후에 설정
HTTP/1.0
1996년에 나왔으며 브라우저와 서버가 융통성을 가지도록 확장
요청의 예시
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/1.1
1997년에 등장하여 HTTP의 첫번째 표준으로 자리잡음
요청의 예시
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)
한계
HOL(Head Of Line Blocking)
파이프라이닝을 통해 하나의 connection을 통해 다수의 요청/응답을 받을 수 있지만 첫 번째 응답이 지연되면, 다음의 응답들은 첫번째 응답처리가 완료되기 전까지 대기하게 되기 때문에 Head Of Line Blocking(HOLB)가 발생한다
연속된 요청의 헤더가 중복이 발생한다
HTTP/2.0
2015년에 등장한 버전으로 HTTP/1.1 의 버전 향상에 초점을 둔 확장
Stream: 연결 내에서 전달되는 바이트의 양방향 흐름
Message: 논리적 요청 또는 응답 메세지에 매핑되는 프레임의 시퀀스
Frame: HTTP/2.0의 최소 단위로, 각 최소 단위에는 하나의 프라임 헤더가 존재한다.

HTTP/3.0
전송 계층 부분에 TCP/TLS 대신 QUIC를 사용
QUIC의 특징
Google에서 개발한 UDP 기반의 전송 프로토콜
연결설정 시간 단축
혼잡제어 개선
HOL없는 멀티플렉싱 지원
TCP의 Stream을 하나의 Chain이 아닌 독립된 Stream Chain을 구성하여 HOL Blocking 해결
전달 오류 수정
연결 마이그레이션
참고
Last updated