HTTP 메시지란?
다음과 같이 HTTP 프로그램이 응답과 요청을 위해 보내는 문자열을 http 메시지라고 한다.
javascript
GET /example/path HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
javascript
HTTP/1.1 200 OK
Date: Sat, 01 Jan 2022 12:00:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1234
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
HTTP 메시지의 특징
-
클라이언트에서 서버로 가는 것을 인바운드, 서버에서 다시 클라이언트로 가는 것을 아웃바운드라고 한다.
-
모든 http 메시지는 발송자에서 수신자에게로 간다. 이를 다운스트림이라고 한다
-
모든 http 메시지는 요청 메시지와 응답 메시지로 구분된다.
요청 메시지의 예시
javascript(시작줄) <메소드> <요청 URL> <버전> (헤더블록) <헤더> (본문) <엔티티 본문>응답 메시지의 예시
javascript(시작줄) <메소드> <상태 코드> <사유구절> (헤더블록) <헤더> (본문) <엔티티 본문>
HTTP 메시지의 구성요소
메시지의 구성요소로 다음과 같은 것들이 있다.
javascript
메서드 : 클라이언트 입장에서 서버가 해주길 원하는 것
요청 URL : 요청 대상이 되는 리소스 지칭
버전 : HTTP의 버전
상태 코드 : 요청 중에 무슨 일이 일어났는지 설명하는 세 자리 숫자
사유 구절 : 상태 코드의 의미를 텍스트로 적은 것
엔티티 본문 : 데이터 블록을 포함하거나, CRLF(빈 칸)로 끝난다.
또 메시지를 3부분으로 나눠 시작줄, 헤더 블록, 본문으로 구분하기도 한다.
javascript
시작줄 :
- 요청줄 : 메서드, 요청 URL, 버전
- 응답줄 : 메서드, 상태코드, 사유구절
- 각각을 공백으로 구분
헤더블록 :
본문 :
HTTP 메시지 : 상태코드
HTTP 메시지 : 버전 번호
- 응답과 요청 양쪽에 모두 기술
- HTTP 규약을 지키는 애플리케이션들에게 대화 상대의 능력과 메시지의 형식을 제공
- 소수처럼 해석하지 않고, 각 숫자를 따로따로 해석.
- 즉 2.22가 2.3 보다 높은 버전 (22 > 3 이므로)