본문 바로가기

CS/Network

[CS/Network] HTTP 버전 별 특징

1. HTTP 란?

: Hyper Text Transfer Protocol의 약자로, 주로 HTML 문서를 주고받는 것에 쓰인다. Client 와 Server 사이에 이루어지는 Request / Response 프로토콜.

 

 

2. HTTP , 월드와이드웹(World Wide Web)의 4개 Building Block 중 하나

월드 와이드 웹 : 인터넷 상의 하이퍼 텍스트 시스템을 구축한 것으로, 초기 Mesh로 불렸으나 90년에 월드와이드웹으로 이름을 바꾸었다. TCP/IP 상에서 만들어짐

 

  1. HTML(Hypertext Markup Language) : Hyper Text 문서를 표현하기 위한 텍스트 형식의 마크업 언어
  2. HTTP(Hypertext Transfer Protocol) : HTML 문서 등을 교환하기 위한 Hyper Text 전송 프로토콜 (웹서버와 통신 목적)
  3. WWW(World Wide Web) : 문서를 디스플레이하기 위한 클라이언트 (첫번 째 브라우저)
  4. httpd : 문서에 접근하도록 해주는 (웹서버?)의 초기 버전

 

3. HTTP 버전 별 특징

1) HTTP/0.9 (One-Line Protocol)

 

(1) 가능한 Method는 'GET'이 유일

(2) HTTP헤더가 없었으며, HTML 파일만 전송 가능

(3) 상태 혹은 오류 코드가 없었음

 

 

2) HTTP/1.0 (확장성 - 1996년 11월)

 

(1) 버전 정보(HTTP/1.0)가 Request 사이로 전송

(2) Response 시작 부분에 상태 코드 (200, 400, 500 등) 가 붙어, 브라우저가 요청 성공/실패를 알 수 있게 되었음

(3) HTTP 헤더 개념을 통해, 요청 / 응답 모두 Meta data 전송을 허용하여 프로토콜을 유연하고 확장 가능하도록 함

(4) 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>
==========================================
GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)

 

3) HTTP/1.1 (표준 프로토콜의 등장 - 1997년 1월 처음 공개)

 

(1) 모호함을 명확하게 하고 많은 개선 사항을 도입한 HTTP의 첫번 째 표준 버전

(2) Keep-Alive 를 통한 커넥션 재사용 가능 (기존 연결에 대해 Handshaking 생략)

(3) Pipelining을 통해, 1번 요청에 대한 응답이 완전히 전송되기 이전에, 2번 요청이 가능하게끔 하여 latency를 낮춤

(4) 컨텐츠 협상 도입(언어, 인코딩 방식)

(5) Server Colocation 허용 

 

4) HTTP/2.0 (새로운 프로토콜 표준 - HTTP/1.1과 근본적인 차이. 2015년 5월 발표, -> 1.1 출시 후 16년 뒤)

: 구글의 SPDY가 HTTP/2.0의 참고 규격

 

(1) 텍스트 프로토콜이 아닌, 이진 프로토콜

(2) 병렬 요청(Request)가 이루어지는 다중화 프로토콜(Multiplexed Streams).

(3) 전송 데이터의 중복이 제거되어, 그에 따른 오버헤드가 사라지고 중복 요청에 대한 중복 헤더들을 압축시킨다. -> 비용 절감

(4) 서버 푸쉬 (Server Push) : 단일 요청(Request)에 대해 다중 응답(Response)가 가능

 

5) HTTP/3.0 (떠오르는 차기 프로토콜 - TCP 기반 HTTP/1.1과 HTTP/2.0의 문제인 HOLB해결이 주안점)

 

: 구글의 QUIC이 HTTP/3.0의 참고 규격이 되고 있다.

(1) HTTP 시멘틱스는 이전 버전들과 동일 (Method, Msg Field, Status ... )

(2) 사용자 공간 혼잡 제어를 UDP(User Datagram Protocol)을 경유하여 사용

(TCP는 기본적으로 3 RTT의 연결 사이클이 필요, UDP는 1회)

4. HTTP/1.1의 한계, 그리고 HTTP/2.0

1) 한계점 => High Latency

 

(1) HOLB (Head of Line Blocking): 순서대로 처리 (요청 / 응답)하는 TCP의 특성으로, 첫 번째 처리가 완료되기까지 다른 요청들이 모두 대기하게 되는 문제(2) RTT (Round Trip Time): 하나의 Connection에 하나의 요청을 처리하는 특성 상, 3 way handshake 반복 등 latency가 증가하게 된다.(3) Header 중복: HTTP/1.1 헤더에는 많은 Meta data가 있으며, 계속 된 Request는 이 Header에 의한 오버헤드가 발생

 

2) 해결 노력

(1) 이미지 분할 (2) 도메인 샤딩 (3) Load Faster

 

** Domain Sharding이란? 

: 웹 정적 파일(Image, CSS, JS)의 로딩 속도를 개선하기 위한 방법. 서브 도메인을 생성하여 병렬로 가져온다.

 

 

 

 

[출처 : 모질라 developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP]

 

'CS > Network' 카테고리의 다른 글

[CS/Network] HTTPS란?  (0) 2021.04.21