RFC 문서에서 정의한 HTTP 메시지 구조의 공식 스펙을 확인해 보자.
https://datatracker.ietf.org/doc/html/rfc7230#section-3
HTTP 메시지는 크게
1. Start-Line
2. Header-Line
3. CRLF
4. Message-Body
로 구성된다.
이 중 Header-Line은 없거나 여러 개가 있을 수 있고, Message-Body는 없을 수 있다.
이제 HTTP 메시지의 구조를 가볍게 살펴보자.
1. Start-Line (시작 라인)
시작 라인은 HTTP 메시지가 요청 메시지일 경우 Request-Line (요청 라인), 응답 메시지일 경우 Status-Line (상태 라인)으로 나뉜다.
요청 라인의 구조는 이러하다.
GET /search?q=hello&hl=ko HTTP/1.1 |
- HTTP 메서드 : 클라이언트가 서버의 자원에 대해 수행할 작업의 종류를 나타낸다.
GET /search?q=hello&hl=ko HTTP/1.1 |
- 요청 대상 : HTTP 요청을 보낼 서버의 자원을 의미한다.
GET /search?q=hello&hl=ko HTTP/1.1 |
- HTTP 버전 : 사용된 HTTP 버전을 의미한다.
상태 라인의 구조는 이러하다.
HTTP/1.1 200 OK |
- HTTP 버전 : 사용된 HTTP 버전을 의미한다.
HTTP/1.1 200 OK |
- 상태 코드 : 요청에 대한 결과를 나타내는 세 자리 정수이다.
ex) 200 → 성공 / 300 → 리다이렉션 (영구적, 일시적) / 400 → 클라이언트 요청 오류 / 500 → 서버 내부 오류 등
HTTP/1.1 200 OK |
- 이유 구문 : 상태 코드에 대한 문자열 형태의 설명을 의미한다.
2. Header-Line (헤더 라인)
HTTP 헤더란, HTTP 통신에 필요한 모든 부가 정보를 의미한다.
이는 Key-Value 형식처럼 헤더 이름 : 헤더 값 형태로 구성된다.
헤더 라인의 구조는 이러하다.
Content-Type: text/html;charset=UTF-8 Content-Length: 3423 |
이렇게 본문에서 사용된 미디어 타입이나, 본문의 바이트 단위 길이 등 다양한 정보를 명시할 수 있다.
3. CRLF
CRLF는 공백을 의미한다.
조금 더 자세히 들여다보면, CR은 Carriage Return의 약자이며 LF는 Line Feed의 약자이다.
Carriage Return은 \r 즉, 커서를 맨 앞으로 옮기는 동작이다.
또한 Line Feed는 \n 즉, 줄 바꿈 동작이다.
쉽게 말해 우리가 쓰는 키보드의 엔터 버튼을 눌렀을 때를 생각해 보면 된다.
4. Message-Body (메시지 본문)
말 그대로 실제 전송하고자 하는 데이터를 의미한다.
<html> <body> ... <body> </html> |
이렇게 HTML 형식일 수도 있고,
{ "id": "king" "name": "Moon Swings" "email": "pork@cutlet.com" } |
이렇게 Json 형식일 수도 있다.
Reference
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'네트워크' 카테고리의 다른 글
HTTP 쿠키란? (0) | 2024.07.15 |
---|---|
HTTP API - 컬렉션과 스토어 (0) | 2024.07.13 |
HTTP 메서드 속성 (0) | 2024.07.11 |
HTTP의 특징 (0) | 2024.07.10 |
TCP/IP 4 Layer PDU (Protocol Data Unit) (0) | 2024.07.02 |