HTTP 0.9
/* 요청 */
GET /mypage.html
/* 응답 */
<HTML>
A very simple HTML page
</HTML>
HTML
복사
•
HTTP의 초기 버전
•
버전 이름이 없었으나 기존의 버전과 구분하기 위해 0.9라 명명
•
HTTP 헤더가 없고 HTML 파일만 전송 가능
•
리소스에 대한 Method는 GET만 존재
HTTP 1.0
/* 요청 */
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>
HTML
복사
•
HTTP 헤더 개념이 도입
◦
요청과 응답에 대한 메타 데이터를 제공
◦
프로토콜이 유연하고 확장 가능해짐
•
버전 정보와 요청 Method가 함께 전송
◦
GET, POST, HEAD
•
상태 코드 라인도 응답의 시작부분에 추가
◦
브라우저 요청의 성공과 실패 파악 가능
•
Content-Type 도입으로 HTML 이외의 문서 전송 기능이 가능해짐
•
커넥션 하나당 요청 하나와 응답 하나만 처리 가능
HTTP 1.1
/* 요청 */
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)
HTML
복사
•
오늘날 가장 많이 사용되는 HTTP 버전
•
Pipelining 추가
◦
앞 요청의 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내고 그 순서에 맞춰 응답을 받는 방식
◦
순차적으로 하나씩 요청 / 응답이 처리되는 기존 방식을 개선
•
Method 종류가 증가됨
◦
GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
•
Connection이 재사용 가능
HTTP 2.0
•
기존 HTTP 1.X 버전의 성능 향상에 초점을 맞춘 프로토콜 (2015년 등장)
◦
표준의 대체가 아닌 확장 (표준 : HTTP 1.1)
•
프레임으로 통신
◦
프레임 : http/2에서 통신의 최소 단위, 각 최소 단위에는 하나의 프레임 헤더가 포함
•
메시지는 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스이다
•
스트림은 구성된 연결 내에서 전달되는 바이트의 양방향 흐름이며, 하나 이상의 메시지가 전달될 수 있다
바이너리 프레이밍
•
HTTP 2.0의 핵심
•
메시지가 캡슐화되어 클라이언트와 서버 사이에 전송되는 방식을 규정
•
Body가 바이너리 프레이밍 계층에 이진 데이터로 전송
•
기존의 줄바꿈으로 구분되는 텍스트를 없애고, 더 작은 메세지와 프레임으로 전송
요청 및 응답 다중화
•
기존의 여러 TCP연결하는 방식과 다르게, 하나의 TCP 연결에 여러 스트림을 사용
◦
요청과 응답을 병렬로 처리 가능
◦
클라이언트와 서버가 http메시지를 독립된 프레임으로 세분화하고, 다른 쪽에서 다시 조립한다
•
TCP 연결이 하나이므로 3-way-handshake 오버헤드가 없고, 네트워크 가용성이 증가하여 속도 상승을 기대할 수 있다
서버 푸시
•
서버가 클라이언트 요청에 대해 여러 응답을 보낼 수 있다
•
원래 요청에 대한 응답과 더불어 서버가 추가적인 리소스를 클라이언트에 푸시할 수 있다
헤더 압축
•
HPACK 압축 방식을 사용해 헤더 세트를 전송
•
헤더 필드를 Huffman 코드로 인코딩하여 필드의 전송 크기를 줄임
•
이전에 표시된 헤더 필드의 색인 목록을 클라이언트와 서버가 유지하고 업데이트한다
→ 이 목록을 참조로 중복 값을 인코딩