이번 장에서 살펴볼 주제
- 메시지가 어떻게 흘러가는가
- HTTP 메시지의 세 부분(시작줄, 헤더, 개체 본문)
- 요청과 응답 메시지의 차이
- 요청 메시지가 지원하는 여러 기능(메소드)들
- 응답 메시지가 반환하는 여러 상태 코드들
- 여러 HTTP 헤더들은 무슨 일을 하는가
메시지의 흐름
HTTP 메시지는 인바운드, 아웃바운드, 업스트림, 다운스트림
총 4가지 용어는 메시지의 방향을 의미합니다. 이 용어들에 대해 살펴보겠습니다.
인바운드, 아웃바운드
트랜잭션 방향을 표현하기 위해 사용합니다.
메시지가 서버로 향하는 것이 인바운드
이고 처리가 끝난 메시지가 사용자에게 돌아가는 것을 아웃바운드
라고 합니다.
업스트림, 다운스트림
HTTP 메시지는 강물과 같이 흐르게 되는데 모든 메시지의 흐름은 다운스트림
으로 흐릅니다.
상류(클라이언트) --> 중류(서버) --> 하류(클라이언트)
흐르는 과정에서 역행하는 부분을 업스트림
이라고 합니다.
메시지의 각 부분
단순한 데이터의 구조화된 블록이며, 시작줄/헤더/본문(엔티티 본문) 세 부분으로 나뉘어 집니다.
이 세 부분에 대해서 학습해보겠습니다.
출처 : https://kimdongwook.tistory.com
시작줄
모든 HTTP 메시지는 시작줄로 시작합니다. 요청과 응답 두 가지를 살펴보겠습니다.
요청줄
요청 메시지는 서버에게 리소스에 대해서 무언갈 해달라고 부탁합니다. 그러기 위해 메소드의 동작, 그 동작을 하는 대상인 URL을 명시합니다. 또한 HTTP 버전도 포함하게 됩니다.
응답줄
응답 메시지는 요청한 결과에 대한 결과 데이터를 클라이언트에게 돌려줍니다. 응답줄에는 HTTP의 버전, 상태 코드, 사유 구절을 명시합니다.
메소드
메소드는 서버에게 무엇을 해야하는지 말해줍니다. 아래 표에는 HTTP 메소드에 대해 정리한 표입니다.
메소드 | 설명 | 본문 포함 |
---|---|---|
GET | 서버에서 어떤 문서(데이터)를 가져옵니다. 가장 흔히 쓰이며 주로 서버에게 리소스를 달라고 요청하기 위해 사용합니다. | X |
HEAD | 서버에서 어떤 문서(데이터)에 대해 헤더만 가져옵니다. HEAD 메소드를 사용하면 리소스를 받아내지 않고도 그에 대해 무엇인가를 알아낼 수 있습니다. |
X |
POST | 서버가 처리해야할 데이터를 보냅니다. 실제로 HTML 폼을 지원하기 위해 흔히 사용되며 폼은 서버로 전송되어 서버는 이를 모아 필요로 하는 곳에 보냅니다. | O |
PUT | 서버에 요청 메시지의 본문을 저장합니다. GET 메소드가 서버로부터 리소스를 받아내는데 반해 PUT은 서버에 문서를 씁니다. 즉, 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 교체합니다. |
O |
TRACE | 메시지가 프록시를 거쳐 서버에 도달하는 과정을 추적합니다. 클라이언트가 어떠한 요청을 하면 자신의 위치와 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지가 망가졌거나 수정되었는지, 만약 그렇다면 어떻게 변경되었는지 확인할 수 있습니다. |
X |
OPTIONS | 서버가 어떤 메소드를 수행할 수 있는지 확인합니다. 여러 리소스에 실제로 접근하지 않고도 그것들을 어떻게 접근하는 것이 최선인지 확인할 수 있는 수단을 애플리케이션에게 제공합니다. |
X |
DELETE | 서버에서 문자를 제거합니다. 당연하게도 URL에 해당되는 리소스를 삭제할 것을 요청합니다. | 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 입니다.
버전 번호
버전 번호는 HTTP/x.y 형식으로 요청과 응답 메시지 모드에 기술됩니다.
헤더
시작줄 다음에 오는 부분으로 최소 0개, 혹은 1개 이상의 여러개의 헤더가 옵니다. 헤더의 역할은 요청과 응답 메시지의 추가 정보를 더해주는 역할을 합니다.
헤더 분류
일반 헤더
요청과 응답 양쪽에 모두 나타날 수 있습니다. 이들은 클라이언트, 서버, 그리고 어딘가에서 메시지를 보내는 다른 애플리케이션들을 위해 다양한 목적으로 사용됩니다.
요청 헤더
그들은 서버에게 클라이언트가 받고자 하는 데이터의 타입이 무엇인지와 같은 부가 정보를 제공합니다.
응답 헤더
클라이언트에게 정보를 제공하기 위한 자신만의 헤더를 가지고 있습니다.
Entity 헤더
본문 크기와 컨텐츠, 혹은 리소스 그 자체를 서술합니다. 엔티티 헤더는 엔티티 본문에 들어있는 데이터의 타입이 무엇인지 말해줄 수 있습니다.
확장 헤더
명세에 정의되지 않은 새로운 헤더입니다. 즉, 비 표준 헤더로서 아직 승인이 되지 않은 헤더입니다.