본문 바로가기

HTTP·Network

HTTP 메시지 구조 정리

HTTP는 “요청(Request)과 응답(Response)”으로 통신한다.
그리고 요청/응답은 모두 HTTP 메시지라는 같은 틀을 가진다.

이번 글에서는 HTTP 메시지를 시작라인(Start-Line) / 헤더(Headers) / 바디(Body) 로 나눠서 구조를 잡고

실제 예시까지 함께 정리한다.

1) HTTP 메시지는 크게 3부분

1) Start-Line (시작라인)
2) Headers    (헤더들)
3) Body       (메시지 바디, 선택)
  • Start-Line: “이 요청/응답이 무엇인지” 요약(첫 줄)
  • Headers: 부가 정보(형식, 인증, 캐시, 길이 등)
  • Body: 실제 데이터(HTML/JSON/파일 등) — 없을 수도 있음

2) HTTP 요청 메시지(Request) 구조

2-1) Start-Line = Request Line

요청의 첫 줄은 아래 3개로 구성된다.

METHOD SP request-target SP HTTP-version CRLF

예시:

GET /members/1 HTTP/1.1
  • METHOD: GET, POST, PUT, DELETE…
  • request-target: 요청 경로(path) + (필요하면 query)
  • HTTP-version: HTTP/1.1, HTTP/2(표기 방식은 다르지만 개념은 동일)

2-2) Headers

예시:

Host: example.com
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 27
  • Host: HTTP/1.1에서 필수. 어느 도메인으로 온 요청인지
  • Accept: 내가 받을 수 있는 응답 타입
  • Authorization: 인증 토큰
  • Content-Type: 바디에 담긴 데이터 타입(JSON, form-data 등)
  • Content-Length: 바디 길이(전송 방식에 따라 없을 수도)

2-3) Body

GET 요청은 보통 body가 없고 POST/PUT/PATCH에서 데이터가 들어가는 경우가 많다.

예시(JSON):

{
  "name": "pil",
  "age": 20
}

 

3) HTTP 응답 메시지(Response) 구조

3-1) Start-Line = Status Line

응답 첫 줄은 아래 형태다.

HTTP-version SP status-code SP reason-phrase CRLF

예시:

HTTP/1.1 200 OK
  • status-code: 200, 201, 400, 404, 500…
  • reason-phrase: OK 같은 설명

3-2) Headers

예시:

Content-Type: application/json
Content-Length: 52
Cache-Control: no-cache
Set-Cookie: sessionId=abc; HttpOnly; Secure
  • Content-Type: 응답 바디의 데이터 타입
  • Cache-Control: 캐시 정책
  • Set-Cookie: 쿠키 설정(세션 유지 등에 사용)

3-3) Body

예시(JSON):

{
  "id": 1,
  "name": "pil",
  "role": "USER"
}

 

4) 실제 예시로 한 번에 보기

4-1) 요청(Request) 예시

POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
Accept: application/json

{"email":"a@a.com","password":"1234"}

4-2) 응답(Response) 예시

HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: sessionId=xyz; HttpOnly; Secure

{"message":"ok"}

 

5) 헤더는 “메타데이터”, 바디는 “진짜 데이터”

정리하면:

  • 헤더는 “이 바디가 뭔지, 어떻게 처리할지” 안내하는 설명서
  • 바디는 실제 payload(HTML/JSON/파일)

특히 API 개발에서는 Content-Type 하나만 제대로 지켜도 디버깅 난이도가 확 줄어든다.

6) 자주 등장하는 헤더 8개(실무 기준)

  • Host (요청 대상 도메인, HTTP/1.1 필수)
  • Content-Type (바디 타입)
  • Accept (받고 싶은 타입)
  • Authorization (인증)
  • Cookie / Set-Cookie (상태 유지)
  • Cache-Control (캐시 정책)
  • User-Agent (클라이언트 정보)
  • Location (리다이렉트/201 created에서 리소스 위치)

7) 면접에서 자주 묻는 질문

  • HTTP 메시지를 구성하는 3요소를 말해보세요.
  • 요청 라인(Request line)에 들어가는 요소는?
  • Content-Type과 Accept 차이는?
  • Host 헤더가 왜 필요한가요?
  • 상태코드 200/201/204의 차이는?

마무리

HTTP 메시지는 결국

  • 요청: Method + Path + Headers + (Body)
  • 응답: Status + Headers + (Body)

'HTTP·Network' 카테고리의 다른 글

클라이언트→서버 데이터 전송  (0) 2026.02.12
HTTP API란?  (0) 2026.02.11
HTTP의 비연결성  (0) 2026.02.10
Stateful vs Stateless  (0) 2026.02.10
HTTP: 클라이언트 - 서버 구조  (0) 2026.02.10