HTTP메세지는 HTTP 프로토콜에서 서버와 클라이언트 간에 데이터를 교환하는 데 사용된다.
데이터들은 HTTP메세지 로 TCP/IP 패킷에 캡슐화 되어 있다.



<1.method> <2.request-target(Path)> <3.protocol>
- http 메서드(method) :
GET,POST,PUT,DELETE,PATCH- 요청 대상(request-target) : 보통
origin form의 형태로 사용되는데 여기서는
절대 경로 와?+문자열 쿼리 (key = value format) 가 온다 .
보통GET와 많이 사용된다- http 버전(protocol) : http 버전을 나타낸다. 버전이 다르면 http 메세지 구조가 달라진다.

<1.protocol> <2.status-code> <3.status-text>
- http 버전(protocol) : http 버전을 나타낸다. 버전이 다르면 http 메세지 구조가 달라진다.
- http 상태 코드(status-code) :요청의 성공 또는 실패 여부를 나타내는 숫자 상태 코드
2xx: 요청 정상 처리(Successful)3xx: Redirection
- 클라이언트의 요청을 완료하려면 유저 에이전트(대부분 브라우저) 의 추가조치가 필요한 경우
4xx: 클라이언트 오류(Client Error)
- 클라이언트 가 서버에 요청을 할수가 없어서 발생하는 오류
5xx: 서버 오류(Server Error)
- 클라이언트의 요청을 서버에서 처리를 못해서 발생하는 오류
- 이유 문구(status-text): 사람이 이해할 수 있는 짧은 상태 코드 설명 글
- 요청 헤더는 요청에 추가적인 부가정보를 제공한다
- ex) 메세지 바디의 내용, 메세지 바디크기, 압축정보, 인증, 요청클라이언트, 서버 정보, 캐시관리 정보, 보안, 쿠키 ..
- 수많은 표준 헤더가 존재한다. 여기서 몇가지 정리해보자
HOST, User-Agent, Authorization, AcceptServer, Set-Cookies, Locationcontent-Type, content-lanth, content-EncodingConnection, Cache-Control ,Data
Context-Type : 표현 데이터 형식Context-Encoding : 표현 데이터의 압축방식Context-Encoding 정보로 압축해제gzip, deflate, identityContent-Language : 표현 데이터의 자연 언어ko,en ...Content-Lenghth : 표현 데이터의 길이---start line---
GET /index.html HTTP/1.1
---header----
Host: example.com
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.7
Accept-Encoding: gzip, br
Accept: 클라이언트가 선호하는 MIME 타입 전달Accept-Charset: 클라이언트가 지원 하는 문자 인코딩Accept-Encoding: 클라이언트가 지원 하는 압축 인코딩Accept-Language: 클라이언트가 선호하는 언어//request 메세지
GET /video.mp4 HTTP/1.1
Host: example.com
Range: bytes=500000-4999999 //50000 부터 마저 다운로드 받기
//response 메세지
HTTP/1.1 206 Partial Content
Content-Range: bytes 500000-4999999/5000000 //전체 리소스 범위중 특정 리소스 범위
Content-Length: 4500000
Content-Type: video/mp4
[500,000 바이트부터 끝까지 데이터]
Range : 클라이언트가 서버에 요청하는 리소스 범위Content-Range : 전체 리소스 범위중 특정 리소스의 범위---start line---
POST /signup HTTP/1.1 <-요청 메세지
---header----
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
Referer: https://example.com/register
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
---body----
email=user@example.com&name=JuJae
Form : 유저 에이전트의 이메일 정보Host : 요청한 호스트의 정보(도메인)Referer 와 함께 거의 요청메세지에서 필수이다User-Agent: 유저 에이전트의 애플리케이션 정보Referer : 현재페이지 기준 이전의 웹 페이지 주소---start line---
HTTP/1.1 503 Service Unavailable <-응답 메세지
---header----
Date: Thu, 05 Sep 2025 10:45:00 GMT //http메세지가 생성된 시각을 나타내는 헤더
Server: Apache/2.4.54 (Ubuntu)
Allow: GET, HEAD, OPTIONS
Retry-After: 120
// 서버가 일시적으로 사용 불가능합니다. 2분 후 다시 시도하세요
Content-Type: text/html; charset=UTF-8
Content-Length: 85
---body----
<html>
<body>
<h1>503 Service Unavailable</h1>
<p>서버가 일시적으로 사용 불가능합니다. 2분 후 다시 시도하세요.</p>
</body>
</html>
Allow : 허용 가능한 HTTP메서드Server : 요청을 처리하기 위한 오리진 서버에 의해 사용되는 소프트웨어 정보Retry-After : 서버가 현재 요청을 처리할수 없을때 , 클라이언트에 재시도 시점을 안내Location : 페이지를 리다이렉트할 URL을 응답HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page
Authorization : 클라이언트 인증 정보를 서버에 전다WWW-Authenticate : 리소스 접근시 사용되어야하는 인증 메서드 정의Set-Cookie : 서버에서 클라이언트로 쿠키 전달(response)Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP요청이 올때마다 서버로 전달헤더와 바디를 구분해주는 줄바꿈(CRLF) 이 있다.
- 실제 전송할 데이터
- http메서드
POST,PUT,PATCH요청만 body 를 가진다.
GET도 표준 스펙에서 가질수는 있으나 , 보편적인경우에는 시작줄(Start line)에서절대경로/?quary의 형태로 사용된다- HTML 문서, 이미지, 영상,JSON 등 모든 데이터 전송가능