: HTTP가 인터넷 배달원이라면, HTTP 메시지는 실제 보내지는 배달물
메시지의 흐름
- 방향: 인바운드, 아웃바운드, 업스트림, 다운스트림
- 인바운드: 클라이언트(사용자 에이전트) -> 원 서버. 서버(파드) 입장에서 볼 때 들어오는 것
- 아웃바운드: 원 서버 -> 사용자 에이전트(클라이언트). 서버(파드) 입장에서 볼 때 나가는 것
- 업스트림, 다운스트림: 메시지는 항상 다운스트림으로 흐른다. 발송자는 수신자 입장에서 업스트림
- 서버 <-> 프락시 <-> 클라이언트 사이를 흐른다.
메시지의 구조
시작줄, 헤더, 본문
e.g ) 응답메시지 예.
시작줄 : HTTP/1.1 201 CREATED
헤더 : Content-type: text/plain
Content-length: 19
빈줄
본문 : Hello world!
- 시작줄과 헤더에는 캐리지 리턴(Carriage Return.
\r
), 개행문자(Line Feed.\n
)로 끝난다.(CRLF)- 항상 CRLF는 아니다(LF - 윈도우에서)
\r
(캐리지 리턴) : 커서를 맨 앞으로 이동\n
(라인 피드) : 커서를 아래로 이동.- 둘을 함께 사용하면(CRLF) - 다음줄의 가장 앞으로 커서를 이동
- 본문이 없는 경우에도 CRLF로 끝나야 함. 그러나, 휴먼에러 방지를 위해 마지막 CRLF 없이도 메시지를 잘 받아들일 수 있어야 한다.
- 헤더는 여러 줄 가능.
- 항상 CRLF는 아니다(LF - 윈도우에서)
- 빈줄 : 헤더와 본문 구분
- 본문 : 메시지(데이터) 덩어리
- 엔터티 본문
요청 메시지와는 시작줄의 문법만 다르다.
e.g) 요청 메시지 시작 줄
1
<메서드> <요청 URL> <버전>
- 요청 URL에 host, port가 생략되어있어도 서버는 자신을 가리키는 것으로 간주
e.g) 응답 메시지 시작 줄
1
<버전> <상태 코드> <사유 구절>
- 버전:
HTTP/<메이저>.<마이너>
- 소수라고 헷갈리지 말 것 : HTTP/2.22는 HTTP2.3보다 큰 버전(22는 3보다 크니까)
- 사유 구절: 사람에게 읽히기 위한 목적으로 설명하는 문구.
HTTP1.0 200 NOT OK
와HTTP1.0 200 OK
는 둘다 성공을 의미하는 것으로 처리되어야 한다.- 상태코드와 일대일 대응
Reference)
HTTP 완벽가이드