책 “HTTP 완벽 가이드”를 읽고 정리한 글입니다.
메시지의 흐름
HTTP 메시지는 HTTP 애플리케이션 사이를 이동하는 데이터 블럭이다. 메시지는 클라이언트, 서버, 프록시 사이를 오간다.
메시지는 원 서버를 인바운드로 송신된다
메시지는 원(original) 서버를 인바운드로 송신됐다가, 처리가 끝나면 사용자에게 (아웃바운드로) 송신된다.
- 인바운드(inbound) : 메시지가 클라이언트에서 서버로 이동하는 것
- inbound : 오는
- 아웃바운드(outbound) : 메시지가 서버에서 클라이언트로 이동하는 것
- outbound : 떠나는
메시지는 다운스트림으로 흐른다
메시지를 받는 쪽이 다운스트림, 메시지를 보내는 쪽이 업스트림이다.
메시지의 구성
HTTP 메시지는 데이터의 구조화된 블록이다.
메시지의 구성은 다음과 같다.
- 시작줄
- 메시지의 종류를 나타냄
- 헤더
- 속성을 나타냄
- 본문
- 데이터를 담고있음
메시지 문법
요청 메시지의 형식은 다음과 같다.
1
2
3
4
<메서드> <요청 URL> <버전>
<헤더>
<엔터티 본문>
응답 메시지의 형식은 다음과 같다.
1
2
3
4
<버전> <상태 코드> <사유 구절>
<헤더>
<엔터티 본문>
- 메서드
- 클라이너트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작
- GET, HEAD, POST 등이 있다.
- 요청 URL
- 요청 대상이 되는 리소스를 지칭하는 URL의 경로 구성요소
- 버전
- 메시지에서 사용중인 HTTP 버전
HTTP/<메이저>.<마이너>
- 상태 코드
- 요청 중에 무슨 일이 일어났는지를 나타내는 세 자리 수
- 첫 번째 자리수는 상태의 대분류이다. (2: 성공, 4,5: 에러)
- 사유 구절(reason-phrase)
- 상태 코드를 사람들이 이해할 수 있도록 설명해주는 문구
- 헤더들
<이름>: <값> \r\n
순서로 나타낸다.
- 엔터티 본문
- 임의의 데이터 블록
- 없을 수도 있다.
시작줄
무엇을 해야하는지를 알려준다.
요청에서
서버가 리소스에 무엇을 할지를 요청한다.
응답에서
상태 정보와 결과 데이터를 담아 클라이언트에게 돌려준다.
메서드
서버가 무엇을 해야하는지를 시작줄의 맨 앞에 적는다.
다음은 자주 쓰이는 메소드의 종류이다.
메소드 | 설명 | 메시지 본문 존재 여부 |
---|---|---|
GET | 서버에서 어떤 문서를 가져온다. | N |
HEAD | 서버에서 어떤 문서에 대해 헤더만 가져온다. | N |
POST | 서버가 처리해야 할 데이터를 보낸다. | Y |
PUT | 서버에 요청 메시지의 본문을 저장한다. | Y |
TRACE | 메시지가 프록시를 거쳐 서버에 도달하는 과정을 추적한다. | N |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지를 확인한다. | N |
DELETE | 서버에서 문서를 제거한다. | N |
상태 코드
다음은 상태 코드의 종류이다.
전체 범위 | 정의된 범위 | 분류 |
---|---|---|
100-199 | 100-101 | 정보 |
200-299 | 200-206 | 성공 |
300-399 | 300-305 | 리다이렉션 |
400-499 | 400-415 | 클라이언트 에러 |
500-599 | 500-505 | 서버 에러 |
많이 쓰이는 상태 코드는 다음과 같다.
상태 코드 | 사유 구절 | 의미 |
---|---|---|
200 | OK | 성공. 요청한 모든 데이터는 응답 본문에 들어있다. |
401 | Unauthorized | 사용자 이름과 비밀번호를 입력해야 한다. |
404 | Not Found | 서버가 요청받은 URL에 해당하는 리소스를 찾을 수 없다. |
헤더
헤더 필드는 요청/응답 메시지에 추가 정보를 더해준다.
이름/값 쌍으로 된 목록의 형태이다.
1
2
3
4
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Content-Length: 1555
Date: Wed, 15 Mar 2023 11:34:02 GMT
엔터티 본문
HTTP 메시지는 이미지, 비디오, HTML 문서 등 다양한 데이터를 담을 수 있는데, 이러한 데이터는 엔터티 본문에 담겨진다.