HTTP 메시지 구조
HTTP 통신은 클라이언트와 서버가 데이터를 주고받는 방식으로 이루어지며,이 때 통신을 위해 사용되는 데이터 형식이 바로 HTTP 메시지이다.
메시지는 크게 요청 메시지(Request)와 응답 메시지(Response) 로 나뉘며, HTTP통신의 핵심이 된다.
구조적으로는 세 가지 주요 요소로 구성되는데 이는 다음과 같다.1. 시작 줄(Start-Line)
- 요청 메시지 : 요청의 메서드, 대상 리소스, HTTP 버전이 포함된다.
- 응답 메시지 : HTTP 버전, 상태 코드, 상태 메시지가 포함된다.
2. 헤더(Header)
- 요청 및 응답과 관련된 메타데이터를 key-value 쌍으로 표현한다.
- 요청의 세부 정보나, 응답의 데이터 형식, 서버 상태 등을 알린다.
3. 본문(Body, Optional)
- 요청 메시지에서는 클라이언트가 서버로 전달할 데이터를 담는다.
- 응답 메시지에서는 서버가 클라이언트로 전달할 데이터가 들어간다.
- 시작 줄
- 요청의 의도를 정의한다.
- 형식:
<HTTP 메서드> <요청 대상 URI> <HTTP 버전>
- 헤더
- 요청과 관련된 추가 정보를 전달한다.
- 형식:
Header-Name: Value
- 공백 줄
- 헤더와 본문을 구분하는 역할.
- 본문(Body, Optional)
- 요청과 함께 전송할 데이터.
- POST, PUT, PATCH 같은 메서드에서 주로 사용됨.
요청 메시지 예시
- 새로운 사용자 등록 요청:
POST /users HTTP/1.1 Host: example.com Content-Type: application/json Content-Length: 57 { "username": "new_user", "email": "user@example.com" }1. 시작 줄 :
POST: 데이터를 서버에 추가하기 위한 요청./users: 요청 대상 URI는/users.HTTP/1.1: 요청에 사용된 HTTP 프로토콜 버전.2. 헤더:
Host: 요청이 도착할 서버의 도메인(example.com).Content-Type: 본문 데이터의 형식이 JSON임을 나타냄.Content-Lengh: 본문 데이터의 길이가 57바이트임.3. 본문:
- JSON 형식으로 새로운 사용자의 정보를 포함.
- 시작 줄
- 서버의 응답 상태를 정의한다.
- 형식:
<HTTP 버전> <상태 코드> <상태 메시지>
- 헤더
- 응답에 대한 부가 정보를 전달한다.
- 형식:
Header-Name: Value
- 공백 줄
- 헤더와 본문을 구분하는 역할.
- 본문(Body, Optional)
- 요청 결과를 포함하거나 클라이언트에 반환할 데이터.
응답 메시지 예시
- 사용자 등록 성공 응답:
HTTP/1.1 201 Created Content-Type: application/json Content-Length: 36 { "id": 1, "username": "new_user" }1. 시작 줄 :
Created: 상태 코드의 의미를 설명하는 메시지.201: 새로운 리소스 생성 성공을 나타내는 상태 코드.HTTP/1.1: 응답에 사용된 HTTP 프로토콜 버전.2. 헤더:
Content-Type: 응답 데이터의 형식이 JSON임을 나타냄.Content-Lengh: 본문 데이터의 길이가 36바이트임.3. 본문:
- 서버에서 생성된 사용자의 ID와 이름 정보를 포함.
구분 요청 메시지 응답 메시지 시작 줄 메서드, URI, HTTP 버전 HTTP 버전, 상태 코드, 상태 메시지 헤더 요청 메타데이터 (Host, Content-Type 등) 응답 메타데이터 (Content-Type, Length 등) 본문(Optional) 클라이언트가 서버로 보낼 데이터 서버가 클라이언트로 전달할 데이터
1. 요청 헤더
Host: 요청의 대상 서버 정보.Content-Type: 요청 본문의 데이터 형식.Authorization: 클라이언트 인증 정보.2. 응답 헤더
Content-Type: 응답 본문의 데이터 형식.Cache-Control: 응답 데이터의 캐싱 정책.Location: 리소스가 이동된 경우, 새 URL 정보.
사용자 정보 수정 요청과 응답
- 요청 메시지:
PUT /users/1 HTTP/1.1 Host: example.com Content-Type: application/json Content-Length: 45 { "username": "updated_user", "email": "new@example.com" }
- 응답 메시지:
HTTP/1.1 200 OK Content-Type: application/json Content-Length: 58 { "id": 1, "username": "updated_user", "email": "new@example.com" }요청은 사용자 정보를 업데이트하고, 응답은 수정된 데이터를 반환한다.
이렇듯 HTTP 메시지는 요청과 응답의 모든 데이터를 담는 구조로, 시작 줄, 헤더, 본문으로 이루어짐. 이를 통해 클라이언트와 서버가 명확한 데이터를 교환하며 통신한다.