HTTP

HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버가 네트워크상의 자원을 요청하고 전달하기 위해 사용하는 무상태 응용 계층 프로토콜이다. World Wide Web의 기본 통신 프로토콜로 만들어졌으며, HTML 문서뿐 아니라 이미지, 영상, 프로그램 파일,...

정식 명칭Hypertext Transfer Protocol
분류응용 계층 네트워크 프로토콜
통신 모델요청·응답, 클라이언트·서버
상태 모델무상태
주요 용도World Wide Web, 웹 API, 기계 간 통신
표준화 기구IETF
현재 핵심 표준RFC 9110
주요 버전HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, HTTP/3
보안 전송HTTPS
기본 URI 스킴http, https
일반적인 하위 전송TCP, QUIC

HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버가 네트워크상의 자원을 요청하고 전달하기 위해 사용하는 무상태 응용 계층 프로토콜이다. World Wide Web의 기본 통신 프로토콜로 만들어졌으며, HTML 문서뿐 아니라 이미지, 영상, 프로그램 파일, 구조화된 데이터와 실시간 스트림 등 다양한 표현을 전송한다. 현대의 HTTP는 웹 브라우저와 웹 서버 사이의 통신을 넘어 웹 API, 모바일 응용 프로그램, 마이크로서비스와 기계 간 통신에도 널리 사용된다.[1]

HTTP 통신은 일반적으로 클라이언트가 대상 자원과 수행할 동작을 나타내는 요청을 보내고, 서버가 처리 결과를 나타내는 응답을 반환하는 방식으로 이루어진다. 요청에는 메서드, 대상 URI, 헤더 필드와 선택적인 콘텐츠가 포함될 수 있으며, 응답에는 상태 코드, 헤더 필드와 선택적인 콘텐츠가 포함될 수 있다. HTTP 메시지는 자체 설명적인 구조를 가지며, 중간에 프록시, 게이트웨이, 역방향 프록시, 캐시와 콘텐츠 전송 네트워크가 배치될 수 있다.[2]

HTTP 자체는 각각의 요청을 독립적으로 처리하는 무상태 프로토콜이다. 사용자 로그인, 장바구니와 세션처럼 여러 요청에 걸쳐 유지해야 하는 상태는 쿠키, 인증 정보, URL, 서버 측 세션 저장소와 응용 프로그램 데이터 등을 이용하여 별도로 구성한다. 무상태라는 성질은 서버가 아무런 상태도 저장할 수 없다는 뜻이 아니라, 프로토콜의 기본 요청 의미가 이전 요청에 대한 서버의 기억을 요구하지 않는다는 뜻이다.

HTTP의 의미 체계와 전송 형식은 서로 분리되어 발전해 왔다. HTTP/1.1은 사람이 읽을 수 있는 텍스트 기반 메시지 형식을 사용하며 주로 TCP 위에서 동작한다. HTTP/2는 동일한 HTTP 의미를 이진 프레임, 스트림 다중화와 헤더 압축으로 전달한다. HTTP/3는 HTTP 의미를 QUIC 위에 매핑하여 독립적인 스트림 처리와 전송 계층 수준의 연결 설정 개선을 제공한다. 따라서 HTTP/1.1, HTTP/2와 HTTP/3는 웹 응용 프로그램이 사용하는 기본 메서드와 상태 코드의 의미를 공유하면서, 메시지를 네트워크로 운반하는 방식에서 차이를 가진다.[3][4][5]

https URI 스킴을 사용하는 HTTPS는 HTTP 통신을 TLS로 보호한다. 이를 통해 전송되는 데이터의 기밀성과 무결성을 제공하고, 인증서를 이용하여 통신 상대의 신원을 검증할 수 있다. HTTPS는 HTTP와 별개의 응용 의미 체계를 사용하는 프로토콜이라기보다, HTTP 메시지를 보안이 적용된 연결로 전달하는 구성이다.

역사

World Wide Web과 HTTP/0.9

HTTP/1.0의 등장

HTTP/1.1과 지속 연결

HTTP/2의 표준화

QUIC과 HTTP/3

현대 HTTP 표준의 재구성

기본 구조와 통신 모델

클라이언트와 서버

요청과 응답

자원과 표현

URI와 대상 자원

사용자 에이전트와 원본 서버

프록시, 게이트웨이와 터널

HTTP 메시지

요청 메시지

응답 메시지

시작 줄과 제어 데이터

헤더 필드

메시지 콘텐츠

트레일러 필드

콘텐츠 길이와 메시지 경계

요청 메서드

GET과 HEAD

POST

PUT과 PATCH

DELETE

OPTIONS와 TRACE

CONNECT

안전성과 멱등성

메서드 확장

응답 상태 코드

정보 응답

성공 응답

리디렉션

클라이언트 오류

서버 오류

상태 코드 확장

헤더 필드

일반적인 표현 메타데이터

요청 조건과 사전 조건

콘텐츠 협상

연결과 전송 제어

전달과 프록시 정보

사용자 정의 헤더와 필드 등록

표현과 콘텐츠

미디어 유형

문자 인코딩

콘텐츠 인코딩

범위 요청과 부분 응답

다중 부분 콘텐츠

콘텐츠 협상

언어와 형식 선택

연결과 전송

TCP 기반 전송

지속 연결

파이프라이닝

연결 재사용

프록시 연결

QUIC 기반 전송

HTTP/1.0과 HTTP/1.1

텍스트 기반 메시지 형식

Host 헤더

지속 연결과 연결 관리

청크 전송 코딩

파이프라이닝과 응답 순서

프로토콜 업그레이드

HTTP/2

이진 프레이밍 계층

스트림과 다중화

프레임과 스트림 상태

HPACK 헤더 압축

흐름 제어

우선순위

서버 푸시

연결 수준의 HOL 차단

HTTP/3

QUIC과 HTTP의 결합

스트림 구성

QPACK 헤더 압축

연결 설정과 암호화

연결 마이그레이션

독립적인 스트림 전달

HTTP/2와의 차이

캐시

개인 캐시와 공유 캐시

신선도와 만료

Cache-Control

조건부 요청

ETag와 Last-Modified

재검증과 304 응답

Vary와 캐시 키

CDN과 역방향 프록시 캐시

인증과 상태 관리

HTTP 인증 프레임워크

Basic과 Digest 인증

Bearer 토큰

쿠키

서버 측 세션

프록시 인증

인증 정보 전달

보안

HTTPS와 TLS

인증서와 서버 인증

중간자 공격 방지

요청 위조

교차 출처 자원 공유

콘텐츠 보안 정책

HTTP 요청 스머글링

헤더 주입과 응답 분할

캐시 오염

다운그레이드와 프로토콜 전환

브라우저와 웹 플랫폼

문서와 하위 자원 요청

동일 출처 정책

CORS

리디렉션 처리

쿠키와 자격 증명

Fetch API와 XMLHttpRequest

서비스 워커

웹 API와 응용 프로토콜

REST 형식의 API

RPC와 HTTP

GraphQL

웹훅

스트리밍 응답

Server-Sent Events

WebSocket 연결 전환

기계 간 통신

성능과 최적화

연결 설정 비용

요청 수와 다중화

압축

캐시 활용

우선순위와 자원 로딩

지연 시간과 처리량

프리커넥트와 사전 로드

CDN과 엣지 전송

표준화와 확장

IETF HTTP Working Group

HTTP 의미 체계

필드와 메서드 등록

상태 코드 등록

구조화 필드

확장 프로토콜

구현체 간 상호 운용성

활용 분야

웹사이트와 웹 응용 프로그램

공개 및 비공개 웹 API

모바일 응용 프로그램

마이크로서비스

클라우드와 분산 시스템

파일과 미디어 전송

사물 인터넷과 임베디드 시스템

다른 프로토콜과의 관계

TCP

QUIC

TLS와 HTTPS

DNS

WebSocket

FTP

SMTP

CoAP

장점과 한계

관련 문서

  1. RFC 9110: HTTP Semantics
  2. MDN Web Docs: Overview of HTTP
  3. RFC 9112: HTTP/1.1
  4. RFC 9113: HTTP/2
  5. RFC 9114: HTTP/3