[CS] HTTP 버전 별 특징 (0.9 / 1.0 / 1.1 / 2.0 / 3.0)

일단 해볼게·2023년 1월 25일
0

CS

목록 보기
7/10
post-thumbnail

Http란?

  • 웹상에서 클라이언트와 서버 간의 통신을 위한 프로토콜이다.
  • 신뢰성 있는 연결을 위해 Http 0.9~2까지는 TCP를 기반으로 한다.

Http/0.9

/* 요청 */
GET /mypage.html

/* 응답 */
<HTML>
A very simple HTML page
</HTML>
  • 메소드가 get밖에 없다.
  • html 파일 자체를 보내주는 기능만 한다.

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>
  • 헤더가 생겼다. → http 버전 정보, 상태 코드 등 추가적인 정보 전송이 가능하다.
  • 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)

  • http/1.1부터는 keepalive라는 기능이 추가되어 연결이 한번 수립되면 데이터 교환을 마칠 때까지 유지하고, 데이터 교환이 끝나면 연결을 끊는 구조이다.
  • Pipelining이 도입됐다. 요청에 대한 응답을 기다리지 않고 여러 요청을 연속적으로 보내서 그 순서에 맞춰서 응답을 받는 방식이다. 하지만 이런 방식은 먼저 보낸 요청을 서버에서 처리하는데 시간이 오래 걸린다면 그 뒤의 요청도 기다려야만 하는 Head Of Line Blocking 현상이 생기게 된다.

Head Of Line Blocking : 결국 앞 요청의 응답이 너무 오래걸리면 뒤 요청은 Blocking 되어버림

Http/2.0

  • 기존의 일반 텍스트 형식의 데이터를 바이너리로 인코딩하여 프레임 단위로 분할하여 보내게 된다.
  • 프레임 단위로 쪼갰기 때문에 메세지간의 순서가 사라지게 된다.

→ Head Of Line Blocking 현상 해결

  • 파싱이나 전송속도도 올라가고 오류 발생 가능성도 낮아지게 됐다.
  • 전송 리소스 간에 우선순위를 설정할 수 있다.
  • multiplexing 가능 → 동시에 여러 요청 처리

Http/3.0 / QUIC

  • QUIC ?
    • Google에서 개발한 UDP 기반의 전송 프로토콜 (Quick UDP Internet Connections)
    • Google에서 TCP의 구조적 문제로 성능 향상이 어렵다고 판단하여 UDP 기반을 선택
    • QUIC은 TCP의 3-way handshake과정을 최적화 하는 것에 초점을 두고 개발됨
    • QUIC은 TCP의 Stream은 하나의 chain으로 연결되는 것과 다르게 각 Stream당 독립된 Stream chain을 구성하여 TCP HOL Blocking을 해결하였다
  • HTTP 3.0
    • QUIC을 기반으로 나온 새로운 HTTP 메이저 버전

참고

https://velog.io/@neity16/HTTP-HTTP-버전-별-특징

https://woong-programing.tistory.com/152

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글