본문 바로가기
백엔드

[인터넷] HTTP 프로토콜 소개 및 버전 별 사항

by Jop 2025. 9. 14.
반응형
HTTP란 무엇인가 ? 

HTTP란 Hypertext Transfer Protocol의 약자로 인터넷에서 데이터를 전송하는데 사용되는 프로토콜입니다.

 

protocol
컴퓨터 또는 기기 간의 데이터 교환을 위한 규칙 체계나 약속을 의미합니다. 사람들의 대화에서 문법이 필요한 것처럼, 컴퓨터나 네트워크 장치들이 서로 원활하게 소통하기 위해 반드시 지켜야 하는 공용어이자 통신 규칙입니다.


HTTP 개념과 역사 : HTTP 버전 

HTTP/0.9

단순한 텍스트기반 프로토콜로 HTML문서만 전송가능합니다. 최초의 버전은 매우 간단했으며 HTTP GET 방식만 지원했습니다. HTTP응답에는 HTML파일만 포함되었고, HTTP헤더와 상태코드는 없었습니다.

ex) 클라이언트가 서버에 연결하여 HTML파일을 요청했다고 가정했을때. 서버는 HTTP 요청을 성공적으로 처리하고 html을 응답으로 보냅니다.

> GET /index.html

<html> Welcome to the example.re homepage! </html>

 

HTTP/1.0

 

1996년도에 등장하여 더 많은 기능과 확장성을 제공하기 시작하였습니다. 여전이 단일 연결로 텍스트 기반 프로토콜이지만 이미지 및 다른 멀티미디어 형식 지원 기능이 추가하였습니다.

> GET /logo.gif HTTP/1.0 
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK Date: Sun, 01 Jan 1995 12:01:01 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
<Encoded data of logo.gif>

 

HTTP/1.1

 

1999년도에 등장하여 현재까지도 가장 많이 사용되고 있는 프로토콜입니다. keep-alive 연결로 다수의 요청과 응답을 단일 연결로 처리 가능하며 헤더 압출 및 파이프라인 요청을 지원하고 있습니다.

 

- 초기 요청


GET /index.html HTTP/1.1 
Host: 
http://www.example.re
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) 
Accept: text/html 
Accept-Language: en-US, en; q=0.5 
Accept-Encoding: gzip, deflate

 

- 응답


200 OK
Server: Apache Date: Thu, 01 Jan 1998 12:01:00 GMT 
Connection: Keep-Alive Keep-Alive: timeout=5, max=500 
Content-Encoding: gzip 
Content-Type: text/html; charset=UTF-8 
Last-Modified: Mon, 29 Dec 1997 12:15:00 GMT 
Transfer-Encoding: chunked 
<html> Welcome to the <img src=”/logo.gif”> example.re homepage! </html>

 

- _두 번째 요청(동일한 연결)_

GET /logo.gif HTTP/1.1
Host: 
http://www.example.re
 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Accept: */*
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate

 

- 응답

200 OK
Age: 8450220
Cache-Control: public, max-age=315360000
Connection: Keep-Alive
Content-Type: image/gif
Content-Length: 5000
Date: Thu, 01 Jan 1998 12:01:01 GMT
Last-Modified: Sun, 01 Jan 1995 12:01:00 GMT
Server: Apache

<The binary data for a 5K GIF image is included in the message body>

 

 

- HTTP/1.0과 HTTP/1.1 차이점



HTTP/1.0의 경우 요청-응답마다 TCP연결이 새로 열리고 닫히므로 매번 새로운 연결과정을 거쳐야됩니다.
반면 HTTP/1.1의 경우 하나의 TCP연결을 유지하면서 여러 요청/응답을 이어서 처리합니다.

 

 HTTP/2.0


2015년도에 등장하여 성능 향상을 위한 여러 기술이 도입되었습니다. 다중 스트림 및 헤더 압축을 통해 페이지 로딩 속도가 향상되었으면 TLS사용 권장으로 변경(HTTPS)되었습니다

1. 이진 프레이밍 (Binary Framing)
    - 기존 HTTP/1.x는 텍스트 기반 메시지를 주고받았지만, HTTP/2는 모든 요청과 응답을 프레임(frame)이라는 이진 데이터 단위로 쪼개 전송합니다.
    - → 파싱이 빠르고, 네트워크 전송 효율이 높아짐.
    
2. 다중화 (Multiplexing)
    - 하나의 TCP 연결에서 여러 요청과 응답을 동시에 병렬로 처리할 수 있습니다.
    - → 이미지, CSS, JS 파일이 많은 페이지도 지연 없이 한 번에 로딩 가능.
    - (HTTP/1.1에서는 연결을 여러 개 열어야 했음)
        
    
3. 헤더 압축 (Header Compression)
    - 요청/응답에 포함되는 헤더(예: Cookie, User-Agent)는 반복되는 정보가 많음.
    - HTTP/2는 HPACK 알고리즘을 사용해 중복된 헤더를 압축, 네트워크 트래픽을 줄임.
    - → 모바일 환경이나 대규모 트래픽에서 큰 효과.
        
    
4. 서버 푸시 (Server Push)
    - 클라이언트가 HTML을 요청하면, 서버가 **예상되는 추가 리소스(CSS, JS 등)를 미리 보내줌**.
    - → 브라우저가 추가 요청을 기다리지 않아도 돼서 페이지 렌더링 속도 개선.
    
5. 스트림 우선순위 (Stream Prioritization)
    - 여러 요청이 동시에 있을 때, 중요도에 따라 리소스 전송 순서를 조정할 수 있음.
    - 예: CSS → JS → 이미지 순으로 우선순위를 부여해, 페이지 렌더링에 중요한 자원을 먼저 다운로드.


 HTTP/3.0

2020년도에 등장하여 기존에 TCP 프로토콜 기반의 통신방식을 사용하지않고 UDP 프로토콜 기반을 사용하고 있습니다. 멀리플렉싱, 헤더 압축 및 연결 설정 시간을 줄이는 기술 등을 도입하였습니다.

1. UDP 기반 QUIC 프로토콜
    - TCP는 연결을 맺기 위해 3-way handshake가 필요하지만, QUIC은 1-RTT 또는 0-RTT로 훨씬 빠르게 연결을 시작할 수 있습니다.
    - 모바일 환경(Wi-Fi → LTE 전환 등)에서도 연결이 끊기지 않고 그대로 이어짐.
    
2. 멀티플렉싱 (Multiplexing)
    - HTTP/2에서도 멀티플렉싱을 지원했지만, TCP 기반이라 하나의 패킷 손실이 전체 스트림에 영향을 주는 Head-of-Line Blocking 문제가 있었습니다.
    - HTTP/3는 각 스트림이 완전히 독립적이라, 하나가 지연돼도 다른 스트림에는 영향이 없음.
    
3. 헤더 압축 (Header Compression)
    - HTTP/2와 마찬가지로 헤더 정보를 압축해 전송량을 줄임.

 

> TCP vs UDP
- TCP: 연결 지향 / 신뢰성 보장 / 순서 보장 → 웹사이트, 파일 다운로드 등 **정확성이 중요한 통신**에 주로 사용.
- UDP: 비연결 지향 / 신뢰성 낮음 / 속도 빠름 → 실시간 스트리밍, 게임 등 **지연 최소화가 중요한 통신**에 주로 사용.
- HTTP/3는 UDP의 장점(빠른 속도, 저지연)을 취하면서 QUIC으로 신뢰성과 순서를 보장 → 웹 환경에도 안정적으로 적용 가능.

 

 참고 

https://http.dev/1.1
- 패스트캠퍼스 - MSA 환경에서 REST API, gRPC, GraphQL로 마스터하는 백엔드 API 개발

반응형

최근댓글

최근글

skin by © 2024 ttuttak