[HTTP 완벽가이드] HTTP 메시지
HTTP 메시지
HTTP가 인터넷의 배달원이라면, HTTP 메시지는 무언가 담아 보내는 소포와 같다.
메시지의 흐름
HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터의 블록들이다.
메시지는 클라이언트, 서버, 프락시 사이를 흐른다. ‘인바운드’, ‘아웃바운드’, ‘업스트림’, ‘다운스트림’은 메시지의 방향을 의미하는 용어다.
메시지는 원 서버 방향을 인바운드로 하여 송신된다.
HTTP는 인바운드와 아웃바운드라는 용어를 트랜잭션 방향을 표현하기 위해 사용한다.
메시지가 원 서버로 향하는 것을 인바운드, 사용자 에이전트로 돌아오는 것을 아웃바운드라 한다.
다운스트림으로 흐르는 메시지
HTTP 메시지는 강물과 같이 흐른다. 요청 메시지냐 응답 메시지냐에 관계없이 모든 메시지는 다운스트림으로 흐른다.
메시지의 각 부분
HTTP 메시지는 단순한, 데이터의 구조화된 블록이다.
메시지는 시작줄, 헤더 블록, 본문 이렇게 세 부분으로 이루어진다.
시작줄은 어떤 메시지인지 서술하며, 헤더 블록은 속성을, 본문은 데이터를 담고 있다.
시작줄과 헤더는 그냥 줄 단위로 분리된 아스키 문자열이다.
각 줄은 캐리지 리런(ASCII 13)과 개행 문자(ASCII 10)로 구성된 두 글자의 줄바꿈 문자열로 끝난다.
이 줄바꿈 문자열은 CRLF
라고 쓴다.
시작줄
모든 HTTP 메시지는 시작줄로 시작한다. 요청의 시작줄은 무엇을 해야 하는지, 응답의 시작줄은 무슨 일이 일어났는지 말해준다.
요청줄
요청 메시지의 시작줄(요청줄)에는 서버에서 어떤 동작이 일어나야 하는지 설명해주는 메서드와 그 동작에 대한 대상을 지정하는 요청 URL이 들어있다.
응답줄
응답 메시지(응답줄)는 수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에게 돌려준다.
메서드
요청의 시작줄은 메서드로 시작하며, 서버에게 무엇을 해야 하는지 말해준다.
메서드 | 설명 | 메시지 본문 여부 |
---|---|---|
GET | 서버에서 어떤 문서를 가져온다. | X |
HEAD | 서버에서 어떤 문서에 대해 헤더만 가져온다. | X |
POST | 서버가 처리해야 할 데이터를 보낸다. | X |
PUT | 서버에 요청 메시지의 본문을 저장한다. | O |
TRACE | 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다. | X |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다. | X |
DELETE | 서버에서 문서를 제거한다. | X |
상태 코드
메서드가 서버에게 무엇을 해야 하는지 말해주는 것처럼, 상태 코드는 클라이언트에게 무엇이 일어났는지 말해준다.
상태 코드는 응답의 시작줄에 위치한다. 상태 코드는 각 응답 메시지의 시작줄에 담겨 반환된다.
숫자로 된 코드와, 문자열로 되어 있어서 사람이 이해하기 쉬운 메시지 두 형태 모두로 반환된다.
전체 범위 | 정의된 범위 | 분류 |
---|---|---|
100-199 | 100-101 | 정보 |
200-299 | 200-206 | 성공 |
300-399 | 300-305 | 리다이렉션 |
400-499 | 400-415 | 클라이언트 에러 |
500-599 | 500-505 | 서버 에러 |
사유 구절
사유 구절은 응답 시작줄의 마지막 구성요소다. 이것은 상태 코드에 대한 글로 된 설명을 제공한다. 예를 들어, ‘HTTP/1.0 200 OK’라는 줄에서, 사유 구절은 OK 이다. 사유 구절은 상태코드와 1:1로 대응된다.
헤더
시작줄 다음에는 0개, 1개 혹은 여러개의 HTTP 헤더가 온다. HTTP 헤더 필드는 요청과 응답 메시지에 추가 정보를 더한다. 기본적으로 이름/값 쌍의 목록이다.
헤더 분류
HTTP 헤더 명세는 여러 헤더 필드를 정의한다. 애플리케이션은 또한 자유롭게 자신만의 헤더를 만들어낼 수 있다.
엔터티 본문
HTTP 메시지의 세 번째 부분은 선택적인 엔터티 본문이다. 엔터티 본문은 HTTP 메시지의 화물이라고 할 수 있다. 그걸들은 HTTP가 수송하도록 설계된 것들이다.
댓글남기기