본문 바로가기
네트워크

HTTP 0.9 , HTTP 1.0, HTTP/1.1, HTTP/2의 차이점

by 책 읽는 개발자_테드 2022. 1. 23.
반응형

목차

· HTTP란?

· HTTP 0.9 - 원라인 프로토콜

· HTTP 1.0 - 확장성 만들기

· HTTP 1.1 - 표준 프로토콜

· HTTP 2 - 더 나은 성능을 위한 프로토콜


HTTP란?

· W3(World Wide Web) 상에서 정보를 주고받을 수 있는 프로토콜이다.

· 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다. 클라이언트가 HTTP를 통해 서버로 정보를 요청하면, 서버는 이 요청에 응답해 필요한 정보를 클라이언트에 전달한다.

· HTTP/2까지는 TCP를 전송 프로토콜로 사용했고, HTTP/3부터는 UDP를 사용한다.

 

HTTP 0.9 - 원라인 프로토콜

· 요청 메서드가 GET만 존재한다. 원라인 프로토콜로 불리었다.

GET /mypage.html

 

· 응답이 파일 내용 자체로 구성된다. HTML 파일 이외에 다른 유형의 문서는 전송할 수 없었다.

- HTTP 헤더가 존재하지 않았다.

<HTML>
A very simple HTML page
</HTML>

 

· 심플하지만, 확장해서 쓰기에는 너무 간단했다.

 

HTTP 1.0 - 확장성 만들기

·  헤더가 추가되었다.

- HTTP 버전을 확인할 수 있다.

- 응답 코드를 확인할 수 있다.

- Content-Type이 존재하여 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>

 

·  커넥션 하나당 요청 하나만 처리할 수 있었다.

https://www.youtube.com/watch?v=xcrjamphIp4

- 문제점: 매번 새로운 연결로 성능이 저하되고, 서버 부하 비용이 증가한다.

 

HTTP 1.1 - 표준 프로토콜

·  HTTP의 첫번째 표준 버전이다.

· 지정한 timeout 동안 커넥션을 닫지 않는 persistent Connection이 도입되었다.

- 여러 요청이 하나의 커넥션을 통해 처리할 수 있게 되었다.

https://www.youtube.com/watch?v=xcrjamphIp4

·  Pipelining 기법이 도입되었다.

- 하나의 커넥션에서 응답을 기다리지 않고, 순차적인 여러 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로, 지연 시간을 줄이는 방법이다.

- 문제1: Head Of Line Blocking, 앞 요청의 시간이 오래 걸리면 뒤에 오는 요청도 해당 요청이 처리될 때까지 기다려야하는 현상이다.

https://www.youtube.com/watch?v=xcrjamphIp4

- 문제2: Header 구조의 중복, 연속된 요청의 경우 Header 값이 같은 경우가 많은에도 불구하고 중복된 값을 그대로 전송하는 현상이다.주고 받는 데이터가 불필요하게 커진다.

 

https://www.youtube.com/watch?v=xcrjamphIp4

 

HTTP 2 - 더 나은 성능을 위한 프로토콜

·  기존 버전의 성능 향상에 초점을 맞춘 프로토콜이다. 즉, 표준의 대체가 아닌 확장을 목적으로한다.

·  HTTP 메시지 전송 방식이 변화되었다. 

- 바이너리 프레이밍 계층을 사용하여, 파싱과 전송 속도를 높이고 오류 발생 가능성을 줄인다.

- 메시지를 프레임이라는 단위(헤더스 프레임, 데이타 프레임)로 분할하고, 이를 바이너리로 인코딩한다.

https://www.youtube.com/watch?v=xcrjamphIp4

·  요청과 응답의 멀티플렉싱을 지원한다.

- HTTP 메시지를 여러 개의 바이너리 프레임으로 나누고, 이를 전송 후 받은 쪽에서 다시 조립한다.

- 받을 쪽에서 다시 조립하는 방식이므로, 요청과 응답의 순서가 의미가 없어지므로 Head Of Line Blocking 문제를 해결한다.

- 스트림: 구성된 연결 내에서 전달되는 바이트의 양방향 흐름으로, 하나 이상의 메시지가 전달될 수 있다.

youtube.com/watch?v=xcrjamphIp4

· 먼저 응답 받고 싶은 요청의 우선순위(Stream Priority)를 지정할 수 있다.

· Server Push를 이용하여, 클라이언트에서 요청하지 않은 리소스를 서버에서 클라이언트로 전송할 수 있다.

youtube.com/watch?v=xcrjamphIp4

· 헤더 압축을 이용하여, 헤더의 크기를 줄여 페이지 로드 시간을 줄인다.

- Header table과 Huffman Encoding 기법을 사용하여 Header 정보를 압축한다. 이를 HPACK 압축 방식이라 부른다. (RFC 7531)

- 약 85%의 데이터를 줄일 수 있다.

youtube.com/watch?v=xcrjamphIp4
youtube.com/watch?v=xcrjamphIp4

출처

 

우아한테크 - 테코톡 youtube.com/watch?v=xcrjamphIp4

https://www.whatap.io/ko/blog/38/

https://ijbgo.tistory.com/26

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

반응형

댓글