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 |