열렬히.뛰기

3. HTTP 메시지

네트워크 > HTTP 완벽 가이드 > HTTP 완벽 가이드 > 3. HTTP 메시지

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 메시지의 특징

  1. 클라이언트에서 서버로 가는 것을 인바운드, 서버에서 다시 클라이언트로 가는 것을 아웃바운드라고 한다.

  2. 모든 http 메시지는 발송자에서 수신자에게로 간다. 이를 다운스트림이라고 한다

  3. 모든 http 메시지는 요청 메시지와 응답 메시지로 구분된다.

    요청 메시지의 예시

    javascript
    (시작줄) <메소드> <요청 URL> <버전>
    (헤더블록) <헤더>
    
    (본문) <엔티티 본문>
    

    응답 메시지의 예시

    javascript
    (시작줄) <메소드> <상태 코드> <사유구절>
    (헤더블록) <헤더>
    
    (본문) <엔티티 본문>
    

HTTP 메시지의 구성요소

메시지의 구성요소로 다음과 같은 것들이 있다.

javascript
메서드 : 클라이언트 입장에서 서버가 해주길 원하는 것
요청 URL : 요청 대상이 되는 리소스 지칭
버전 : HTTP의 버전

상태 코드 : 요청 중에 무슨 일이 일어났는지 설명하는 세 자리 숫자
사유 구절 : 상태 코드의 의미를 텍스트로 적은 것

엔티티 본문 : 데이터 블록을 포함하거나, CRLF(빈 칸)로 끝난다.

또 메시지를 3부분으로 나눠 시작줄, 헤더 블록, 본문으로 구분하기도 한다.

javascript
시작줄 :
	- 요청줄 : 메서드, 요청 URL, 버전
	- 응답줄 : 메서드, 상태코드, 사유구절
	- 각각을 공백으로 구분

헤더블록 :
본문 : 

HTTP 메시지 : 메서드

HTTP 메시지 : 상태코드

HTTP 메시지 : 버전 번호

  • 응답과 요청 양쪽에 모두 기술
  • HTTP 규약을 지키는 애플리케이션들에게 대화 상대의 능력과 메시지의 형식을 제공
  • 소수처럼 해석하지 않고, 각 숫자를 따로따로 해석.
    • 즉 2.22가 2.3 보다 높은 버전 (22 > 3 이므로)

HTTP 메시지 : 헤더블록