본문 바로가기
3층 개발관/웹 지식

[HTTP] HTTP 0.9/1.0/1.1/2.0/3.0 특징 정리

by 개발관 2023. 4. 6.
반응형

HTTP에 관해서는 추후 정리하여 링크 달겠습니다.

이번 장에서는 각 버전별 특징과 문제점에 대해서 담아보겠습니다.

 


1. HTTP 0.9

▶ HTTP 0.9 버전 특징

1. 요청과 응답이 심플

2. 요청은 GET 메서드 요청만 존재하며, 응답에는 Body만 존재

 

아래는 HTTP 0.9버전의 예시입니다.

요청
GET /index.html
응답
<html>
	<h1> index.html입니다. </h1>
</html>

 

▶ HTTP 0.9버전 문제점

1. 헤더가 존재하지 않아 HTML파일만 전송이 가능

2. 상태 코드가 존재하지 않아 문제가 발생한 경우 특정 HTML의 파일을 되돌려주며 사람이 처리할 수 있게끔 하였다.

 


2. HTTP 1.0

▶ HTTP 1.0버전 특징

1. 각 요청에 버전정보가 전송되기 시작

2. 상태 코드가 응답에 시작에 붙어서 전송 시작 ( 브라우저가 요청에 대한 응답 결과를 알 수 있게 되었다.)

3. HTTP 요청과 응답에 헤더를 붙여서 전송, *메타 데이터 전송이 허용되었다.

 

아래는 HTTP1.0에 대한 요청과 응답을 보여주는 예시이다.

 

Mdn Web Docs에서 발췌

 

**참고**
메타 데이터(MetaData)란 "데이터에 대한 데이터" 라는 뜻으로 곧 'HTML 문서에 대한 데이터'라고 정의할 수 있다.
ex) html의 문서에서 이러한 구문을 작성한 적이 있을것이다.
 <meta charset="utf-8">
 <meta name = "author" content="imkdk">

 

▶ HTTP 1.0 버전 문제점

1. 연결 시 요청하나 응답하나로 구성되어 있다.

2. 매번 새로운 연결로 성능이 저하되고, 서버 부하비용이 올라간다.

Mdn Web Docs에서 발췌

 

 

 

 

 

 

왼쪽의 사진과 같이 연결 시 연결 -> 요청 -> 응답 -> 연결해제로 구성되며

매번 요청을 할시 새로운 연결을 해야 하므로 성능이 저하된다.

 

 

 

 

 

 

 

 

 

 

 

 


3. HTTP 1.1

▶ HTTP 1.1 버전 특징

1. keep-alive == Persistent Connection 기술 도입

  • 하나 이상의 요청에 대해 연결을 재 사용할 수 있도록 연결 유지 메커니즘(keep-alive)을 도입

2. 파이프라이닝(Pipelining)

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

 

아래 사진은 HTTP1.0과 keep-alive, 파이프 라이닝방식의 속도를 측정한 예시이다.

Mdn Web Docs에서 발췌

해당 사진과 같이 요청 시 매번 연결해야 하는 HTTP 1.0 방식과 달리 keep-alive기술로 한 번의 연결 시 여러 번의 요청 응답을 할 수 있게끔 변경하였고, 파이프 라이닝 방식은 응답을 기다리지 않고 순차적으로 연속적인 요청을 보내 순차적인 응답을 받는 방식을 통해 *레이턴시를 더욱 줄이게 되었습니다.

 

**참고**
레이턴시(Latency) :  요청된 리소스가 대상에 도달하는데 걸리는 네트워크 시간

 

▶ HTTP 1.1 버전 문제점

1. HOL(Head Of Line) Blocking

  • 순차적으로 응답을 받는 방식으로 인해 앞의 응답이 오래 걸리게 되면 뒤의 응답들은 더욱 늦어지는 HOLB 문제가 발생

2. Header 구조 중복

  • header의 값이 중복되는 게 많은데도 요청 시 똑같은 Header의 내용을 또 요청해야 하므로, 주고받는 데이터가 불필요하게 커지는 현상

 


4. HTTP 2.0

▶ HTTP 2.0 버전 특징

1. 메시지 전송 방식의 변화

  • 텍스트 형식의 메시지를 보내면 바이너리 프레이밍 계층을 통하여 프레임을 구별해서 바이너리 인코딩되어 데이터를 보낸다.
  • 이로 인해 파싱, 전송 속도가 향상되고, 오류발생 가능성이 다운되었다.

예시 사진)

**참고**
스트림(Stream) : 클라이언트와 서버 간 설정된 연결 내에서 하나 이상의 메시지를 전달할 수 있는 양방향 흐름
메시지(Message) : 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스
프레임(Frame) : HTTP/2에서 최소 통신 단위

 

2. Multiplex Streaming

  • 하나의 커넥션으로 동시에 여러 개의 스트림이 동시에 열릴 수 있으며, 각각의 스트림이 하나의 프레임을 전송한다.
  • 이로 인해 HTTP1.1과 같이 하나의 응답이 올 때까지 기다리거나(HOLB), 여러 개의 커넥션을 만들어야 되는 문제를 개선하였다.

3. Stream Priority

  • 각 스트림은 1~256 사이의 정수 가중치를 할당받을 수 있다.
  • 이를 통해 우선순위를 지정할 수 있다.

4. Server Push

  • 원래 요청에 대한 응답 외에도 서버는 클라이언트가 각 리소스를 요청할 필요 없이 클라이언트에 추가 리소스를 푸시할 수 있다.

출처 : https://web.dev/performance-http2

5. Header Compression

  • Huffman 코딩을 통해 개별 값을 전송할 때 압축
  • 중복된 Header는 index값만 전송하고 중복되지 않은 Header 정보의 값은 HPACK 압축 방식으로 인코딩 처리하여 전송한다.
  • 결과적으로 헤더의 크기가 줄어들어(약 85% ~ 88% 감소) 로드 크게 개선되었다.

출처 : https://web.dev/performance-http2

**참고**
HPACK : 무손실 압축 알고리즘
Huffman coding : 문자의 빈도 또는 확률정보를 이용해 통계적 압축하는 방식

 


5. HTTP 3.0

▶ HTTP 3.0 등장 배경

  • 일상생활을 하면서 모바일 인터넷 사용량 증대
  • 모바일은 끊임없이 한 네트워크에 다른 네트워크로 전환된다.
  • TCP를 사용하면 한 네트워크에서 다른 네트워크로의 연결 핸드오프가 느리다.

**참고**
핸드오프 : 무선 단말이 접속되어 있는 무선 LAN의 이동통신망의 기지국에서 다른 AP나 기지국으로 접속을 바꾸는 것을 의미한다.

 

▶ HTTP 3.0 특징

1. QUIC 프로토콜을 사용

  • UDP를 선택한 이유는??
    • TCP 헤더는 신뢰성을 확보하지만 지연을 줄이기 힘든 구조
    • UDP는 데이터 전송에 집중한 설계로 별도의 기능이 없다 -> 원하는 기능을 커스터마이징 하며 TCP의 Latency를 줄이면서 TCP만큼의 신뢰성을 확보가능하다.

https://diy-multitab.tistory.com/27 발췌

  • HOLB의 문제를 해결하기 위해 UDP기반인 QUIC을 사용(HTTP2.0에선 응용계층에서의 HOLB는 해결되었으나 TCP자체의 전송계층에서의 HOLB는 해결되지 않음)
  • UDP는 데이터 신뢰성을 보장하지 않지만 QUIC계층 추가를 통해 TCP와 같은 신뢰성 제공

2. Connection UUID 사용

  • Connection UUID라는 고유한 식별자로 서버와 연결하여 커넥션의 재수립이 불필요하다.
  • 이동 중 IP주소가 변경되어도 커넥션을 다시 수립할 필요가 없다

3. 보안성 향상

  • TLS(Transport Layer Security)란 전송 계층 보안이라고 불리며, SSL의 향상된 더욱 안전한 버전이다
  • ex) 디지털인증서

 

  • IP Spoofing / Replay Attack 방지
  • 필요에 따라 Source Address Token을 발급하여 출발지 아이피를 변조 및 재생공격에 대한 검증을 수행한다.
  • TCP통신에서 Sequence Number를 이용하여 신뢰관계를 맺은 클라이언트인지 검증하는 것과 같은 기능을 수행

 

4. 독립 스트림 사용

  • 스트림 자체를 독립적으로 여러 개로 나누어서 처리하도록 했다.
  • 특정 스트림에서 HOLB가 발생하더라도 다른 스트림에 영향을 미치지 못한다.

 

 


** 참고자료 **

https://velog.io/@jongil512/HTTP1.x-HTTP2.0-QUIC

https://web.dev/performance-http2/

https://developer.mozilla.org/ko/docs/Web/HTTP/Connection_management_in_HTTP_1.x

https://devfunny.tistory.com/290

https://brunch.co.kr/@sangjinkang/3

https://velog.io/@gth1123/HTTP2.0-%EC%9E%91%EC%84%B1%EC%A4%91

https://playground10.tistory.com/98

https://developer-jp.tistory.com/52

https://medium.com/monday-9-pm/%EC%B4%88%EB%B3%B4%EA%B0%9C%EB%B0%9C%EC%9E%90-http3-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-98da26749cb9

 

반응형