Computer Science/네트워크

HTTP 버전별 특징

KimDongJun 2022. 12. 27. 11:36

목차

  1. HTTP 0.9
  2. HTTP 1.0
  3. HTTP 1.1
  4. HTTP 2.0

HTTP (HyperText Transfer Protocol)

다양한 형태의 정보를 전송하는 어플리케이션 프로토콜

역사

  연도 간단 설명
HTTP/0.9 1991년 GET 메서드만 지원
오류 코드 X
HTTP 헤더 X
HTML 파일만 전송
HTTP/1.0 1996년 메서드, 헤더, 오류코드 추가
여러 타입의 파일도 전송 가능
매 요청마다 연결 및 연결 종료
HTTP/1.1 1997년 Keepalive 기능 default로 추가
pipelining 기능 추가
     
HTTP/2.0 2015년 1.1버전 한계인 HOL block 보완을 위해 등장
Multiplexing
HTTP/3.0 ~ing QUIC (UDP) 프로토콜을 사용
궁금하면 https://evan-moon.github.io/2019/10/08/what-is-http3/ |

 

1. HTTP 0.9

  • 메소드 : GET
  • 보내줄 수 있는 데이터 : HTML
GET /mypage.html

<HTML>
Simple HTML page
</HTML>

2. HTTP 1.0

이전 세대에서 추가된 점

  • 헤더 추가
    • 상태 코드, 컨텐츠 타입 등 메타 데이터 포함
  • 응답 HTML 이외에도 추가
  • 메소드 추가 : HEAD, POST

주요 특징!

  • 매 번 요청마다 hand shake
    • ⇒ 굉장히 느림

일반적인 요청과 응답

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

이전 세대에서 달라진 점

  • 메서드 추가 : OPTIONS, PUT, DELETE, TRACE
  • 헤더 몇가지 기능 추가
    • * Via : 중계서버(프록시, 게이트웨이 등)의 지원 프로토이름 * Accept : ex. application/json, text/plain, */* ...
  • 매 요청마다 hand shake 하지 않도록 Keep alive 기능 추가
  • 파이프라이닝 기능 추가

Keep-alive

  • 클라이언트와 서버 사이 연결을 일정 기간동안 기억해서 반복적으로 일어나는 통신의 연결 횟수를 줄임

Pipe Lining

  • 여러개의 요청을 보낼 때 서버로부터 이전 요청에 대한 응답을 받기까지 기다리지 않고 바로 요청을 보내는 것

한계

HOL block (Head-Of-Line block)

  • 먼저 처리된 요청이 있어도 먼저 서버로 도착한 응답이 처리 될 때 까지 Block 상태가 되는 것

⇒ 해결은 가능 tcp 연결을 만들어 병렬적으로 이용하는 방식

⇒ 이또한 메모리, cpu리소스를 낭비하는 단점 존재!

하나의 단일 커넥션을 통한 요청의 전형적인 전체 흐름의 예시

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)

GET /static/img/header-background.png 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: */*
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
Age: 9578461
Cache-Control: public, max-age=315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache

(image content of 3077 bytes)

4. HTTP 2.0

첫 시작은 구글이 만든 시험용 프로토콜 SPDY

달라진 점

  • HTTP 1.1 프로토콜을 계승해서 성능 향상에 초점을 맞춤

  • 요청 메시지를 작은 프레임으로 쪼갬
  • 헤더와 컨텐트 부분을 각각의 프레임으로 분리
  • 평문을 사용하던 이전 버전과 달리 바이너리 포맷으로 인코딩된 Message, Frame으로 구성

 

HTTP 2.0 특징들

HOL Block 해결 (Multiplexed Streams)

Stream Prioritization

  • 전송 리소스 간에 우선순위를 설정할 수 있다.

Server Push

  • 클라이언트의 요청에 대해 요청하지 않은 리소스를 마음대로 보내줄 수 있다.
  • 클라이언트가 요청하기 전에 필요하다고 예상되는 리소스를 Server에 서 먼저 요청
  • ex) 하나만 요청했는데 css, js, image를 함께 전송

Header Compression

  • header table과 HPAC 압축 방식을 이용해 압축
  • 이전 Header의 내용과 중복되는 필드를 전송하지 않아 데이터를 절약