///////
Search
💡

HTTP의 버전별 차이를 알려주세요. (0.9 1.0 1.1 2.0)

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 코드로 인코딩하여 필드의 전송 크기를 줄임
이전에 표시된 헤더 필드의 색인 목록을 클라이언트와 서버가 유지하고 업데이트한다
→ 이 목록을 참조로 중복 값을 인코딩

참고