[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. 메시지의 구성 요소
시작 줄 (Start Line)
요청 메시지:
GET /index.html HTTP/1.1
응답 메시지:
HTTP/1.1 200 OK
헤더 (Headers)
요청 또는 응답에 대한 메타 정보 제공
각 줄은
키: 값
형태
본문 (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 |
HEAD | GET과 동일하지만, 본문 없이 헤더만 요청. 연결 테스트 등 활용. | 아니오 | 멱등성 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.