Post

[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 03. HTTP 메시지

3장 HTTP 메시지에서는 웹 콘텐츠를 실어 나르는 HTTP 메시지에 대해 자세히 알아본다.

[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 03. HTTP 메시지

📝 핵심 요약

주제요약
메시지 흐름서버 방향 - 인바운드, 사용자 방향 - 아웃바운드, 메시지는 다운 스트림으로 흐름
메시지 구성‘시작줄 + 헤더 + 본문’ 으로 이루어짐
요청 메시지클라이언트 → 서버. 메서드, URL, 버전 + 헤더 + 본문
응답 메시지서버 → 클라이언트. 버전, 상태코드, 사유 구절 + 헤더 + 본문
메서드GET, POST, PUT, DELETE 등 요청의 동작 정의
상태 코드1xx 정보, 2xx 성공, 3xx 리디렉션, 4xx 클라이언트 오류, 5xx 서버 오류
헤더요청/응답/엔터티 정보 전달. Content-Type, Host, Authorization 등 다양




📌 이 장에서 다루는 내용

  • HTTP 메시지의 구성 (시작줄, 헤더, 본문)

  • 요청/응답 메시지의 흐름과 구조

  • HTTP 메서드 상세 설명

  • 상태 코드 분류 및 예시

  • HTTP 헤더의 종류와 역할




1. 메시지의 흐름

  • HTTP 메시지는 클라이언트 → 서버로 보내지는 요청 (인바운드로 이동), 서버 → 클라이언트로 보내지는 응답 (아웃바운드로 이동) 이 있음

  • 모든 HTTP 메시지는 다운스트림 방향으로 흐름

    • 업스트림(upstream): 메시지를 보내는 방향 (요청 시 클라이언트, 응답 시 서버)

    • 다운스트림(downstream): 메시지를 받는 방향 (요청 시 서버, 응답 시 클라이언트)

🔄 메시지 전달 흐름도

1
클라이언트 → 요청 메시지 → 서버 → 응답 메시지 → 클라이언트




2. 메시지의 구성 요소

  1. 시작 줄 (Start Line)

    • 요청 메시지: GET /index.html HTTP/1.1

    • 응답 메시지: HTTP/1.1 200 OK

  2. 헤더 (Headers)

    • 요청 또는 응답에 대한 메타 정보 제공

    • 각 줄은 키: 값 형태

  3. 본문 (Entity Body)

    • 요청 또는 응답의 실제 데이터 내용

    • 생략 가능하며, 데이터 크기나 형식은 헤더에 의해 제어됨




3. 요청 메시지, 응답 메시지

📨 요청 메시지 구조

1
2
3
4
<메서드> <요청 URL> <버전>
<헤더>

<엔터티 본문>

💡예시

1
2
3
4
5
6
POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

name=John+Doe&age=30


📩 응답 메시지 구조

1
2
3
4
<버전> <상태 코드> <사유 구절>
<헤더>

<엔터티 본문>

💡예시

1
2
3
4
5
6
7
8
9
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1354

<html>
  <body>
    <h1>Welcome!</h1>
  </body>
</html>




4. HTTP 메서드

  • HTTP 메서드는 클라이언트가 서버에 어떤 동작을 요청할지를 정의
메서드설명Body 포함 여부특징 및 용도
GET리소스를 조회. 서버에서 데이터를 받아옴. 캐시 가능.아니오멱등성 O, 안전 O
HEADGET과 동일하지만, 본문 없이 헤더만 요청. 연결 테스트 등 활용.아니오멱등성 O, 안전 O
POST서버에 데이터를 전송. 폼 제출, 파일 업로드 등.멱등성 X, 안전 X
PUT서버에 리소스를 저장하거나 수정. 전체 교체.멱등성 O, 안전 X
PATCH리소스를 부분 수정. 전체가 아닌 일부 속성 변경.멱등성 X, 안전 X
DELETE리소스를 삭제 요청.아니오멱등성 O, 안전 X
TRACE요청 경로를 그대로 반환. 디버깅용.아니오멱등성 O, 안전 O
OPTIONS서버가 지원하는 메서드 및 기능 확인.아니오멱등성 O, 안전 O
  • 멱등성: 동일한 요청을 여러 번 보내도 같은 결과를 보장함
  • 안전성: 서버 상태를 변경하지 않음




5. 상태 코드

  • 상태 코드는 3자리 숫자로 구성되며, 첫 번째 숫자는 응답의 범주를 나타냄
범위의미대표 코드 및 설명
1xx정보 응답100 Continue - 클라이언트가 요청 본문을 보내기 전에 준비 확인
101 Switching Protocols - 서버가 클라이언트 요청에 따라 프로토콜 전환
2xx성공 응답200 OK - 요청 성공
201 Created - 요청으로 인해 새 리소스가 생성됨
202 Accepted - 요청이 수락되었으나 아직 처리되지 않음
204 No Content - 본문 없이 요청 성공
3xx리디렉션301 Moved Permanently - 요청 리소스가 영구적으로 새 위치로 이동
302 Found - 임시 리디렉션, 클라이언트는 다른 URI 참조
303 See Other - 다른 URI에서 리소스를 조회하라는 의미
304 Not Modified - 클라이언트 캐시 사용 가능, 내용 변경 없음
4xx클라이언트 오류400 Bad Request - 잘못된 문법 등으로 요청을 처리할 수 없음
401 Unauthorized - 인증 필요
403 Forbidden - 서버에 의해 요청 거부
404 Not Found - 요청한 리소스를 찾을 수 없음
405 Method Not Allowed - 지원하지 않는 메서드 요청
5xx서버 오류500 Internal Server Error - 서버 내부 오류
501 Not Implemented - 서버가 요청 메서드를 지원하지 않음
502 Bad Gateway - 게이트웨이 또는 프록시 서버에서 잘못된 응답 수신
503 Service Unavailable - 서버 과부하 또는 점검 중
504 Gateway Timeout - 게이트웨이가 응답을 제시간에 받지 못함




6. HTTP 헤더

  • 헤더는 클라이언트와 서버 간의 협상을 가능하게 하고, 데이터의 속성, 보안, 캐싱, 연결 관리 등을 담당

📋 헤더 분류

헤더 종류설명
일반 헤더요청과 응답 모두에 사용. 메시지 전체에 적용되는 정보.
요청 헤더클라이언트가 서버로 요청 시 포함. 클라이언트 정보, 요청 조건 등.
응답 헤더서버가 클라이언트로 응답 시 포함. 서버 정보, 응답 조건 등.
엔터티 헤더메시지 본문에 대한 정보 제공. 콘텐츠 길이, 타입 등.
확장 헤더표준 외 사용자 정의 헤더.


💡 주요 헤더 예시

✅ 일반 헤더

헤더설명
Date메시지가 생성된 시간 및 날짜 (RFC 1123 형식)
Connection연결 방식 설정 (keep-alive, close)
Cache-Control캐시 정책 설정 (no-cache, max-age 등)

✅ 요청 헤더

헤더설명
Host요청 대상 서버 도메인 및 포트 (HTTP/1.1 필수)
User-Agent요청을 보낸 클라이언트 정보 (브라우저/OS)
Accept처리 가능한 MIME 타입 지정
Accept-Encoding지원하는 압축 포맷 (gzip, deflate)
Referer이전 페이지 URL 정보 제공
Authorization인증 정보 (Basic, Bearer) 전달
Cookie저장된 쿠키 정보 전송

✅ 응답 헤더

헤더설명
Server응답을 생성한 서버 애플리케이션 정보
Set-Cookie클라이언트에 쿠키 저장 지시
Location리디렉션 위치 (3xx 응답 시 사용)
WWW-Authenticate인증 방식 요구 (Basic realm="...")

✅ 엔터티 헤더

헤더설명
Content-Type본문 콘텐츠 타입 (예: application/json)
Content-Length본문 데이터의 길이 (바이트 단위)
Content-Encoding본문 콘텐츠 압축 방식 (예: gzip)
Content-Language본문 언어 정보 (ko, en 등)
Last-Modified리소스의 마지막 수정 날짜 및 시간




7. HTTP 버전

버전특징
HTTP/0.9단순 GET 요청만 가능. 헤더 없음
HTTP/1.0헤더 및 상태 코드 도입. 연결은 요청마다 끊김
HTTP/1.1지속 연결(keep-alive), 호스트 필드 필수, 파이프라이닝 지원



This post is licensed under CC BY 4.0 by the author.