HTTP 메시지 #
작성자 jaewon0913
3.1 메시지의 흐름 #
- HTTP 메시지는 HTTP 어플리케이션 간에 주고받은 데이터의 블록들이다.
- 데이터의 블록들은 메시지의 내용과 의미를 설명하는 텍스트 메타 정보로 시작하고 그 다음에 선택적으로 데이터가 올 수 있다.
- 메시지는 클라이언트, 서버, 프락시 사이를 흐른다.
- 인바운드, 아웃바운드, 업스트림, 다운스트림은 메시지의 방향을 의미한다.
3.1.1 메시지는 원 서버 방향을 인바운드로 하여 송신된다. #
- 인바운드 : 메시지가 원 서버로 향하는 이동
- 아웃바운드 : 모든 처리가 끝나고 뒤에 메시지가 사용자 에이전트로 돌아오는 것
3.1.2 다운스트림으로 흐르는 메시지 #
- 모든 메시지는 다운스트림으로 흐름
- 메시지의 발송자는 수신자의 업스트림이 됨
3.2 메시지의 각 부분 #
- HTTP 메시지는 단순한, 데이터의 구조화된 블록이다.
- 각 메시지는 클라이언트로부터의 요청이나 서버로부터의 응답 중 하나를 포함한다.
- 메시지는 시작줄, 헤더 블록, 본문 으로 구성된다.
- 시작줄, 헤더 블록
- 줄 단위로 분리된 아스키(ASCII) 문자열이다.
- 각 줄은 캐리지 리턴과 개행 문자로 구성된 두 글자의 줄바꿈 문자열로 끝난다.
- 본문
- 선택적인 데이터 덩어리이다.
- 텍스트나 이진 데이터를 포함할 수 있고, 그냥 비어 있을 수 있다.
- 시작줄, 헤더 블록
메시지 문법 #
- 요청, 응답 메시지 구조는 동일하나 시작줄에만 문법이 다르다.
- 요청메시지 형식
<메서드> <요청 URL> <버전> <헤더> <엔티티 본문>
- 응답메시지 형식
<버전> <상태 코드> <사유 구절> <헤더> <엔티티 본문>
- 요청메시지 형식
각 부분 | 설명 |
---|---|
메서드 | 클라이언트 측에서 서버가 리소스에 대해 행해주길 바라는 동작을 의미한다.‘GET’,‘HEAD’,‘POST’ 와 같이 한 단어로 구성된다. |
요청 URL | 요청 대상이 되는 리소스를 지칭한다. |
버전 | 메시지에서 사용 중인 HTTP의 버전이다.형식 : HTTP/<메이저>.<마이너> |
상태코드 | 요청 중에 무엇이 일어났는지 설명해주는 세 자리의 숫자이다.각 코드의 첫 번재 자릿수는 상태의 일반적인 분류(‘성공’,‘에러’ 등)를 나타낸다. |
사유구절 | 숫자로 된 상태코드의 의미를 이해할수 있게 설명해주는 짧은 문구이다. |
헤더들 | 이름,콜론(:),선택적인 공백, 값, CRLF 가 순서대로 나타나는 0개 이상의 헤더이다. |
엔티티 본문 | 임의의 데이터 블록을 포함한다.모든 메시지가 갖는 것이 아니므로 종종 CRLF 로 끝나는 경우도 있다. |
시작줄 #
- 모든 HTTP 메시지는 시작줄로 시작한다.
- 요청 메시지에서는 무엇을 해야 하는지를, 응답 메시지에서는 무슨 일이 일어났는지 알려준다.
- 요청줄
- 서버에서 어떤 동작이 일어나야 하는지 설명해주는 메서드와 그 동작에 대한 대상을 지정하는 요청 URL이 들어있다.
- 클라이언트가 어떤 HTTP 버전으로 말하고 있는지 서버에게 알려주는 HTTP 버전도 포함한다.
- 응답줄
- 수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에게 돌려준다.
- 메서드
- HTTP 명세는 공통 요청 메서드의 집합을 정의한다.
- 요청 메시지에 따라 본문이 있을 수도 있고 없을 수도 있다.
- 상태코드
- 클라이언트에게 무엇이 일어났는지 말해준다.
- 각 응답메시지의 시작줄에 담겨 반환한다.
- 사유 구절
- 응답 시작줄의 마지막 구성요소이다.
- 상태 코드에 대한 글로 된 설명을 제공한다.
- 숫자로 된 상태코드 + 문자열로 된 사유구절이 일대일 대응한다.
- 버전 번호
- HTTP 어플리케이션들이 자신이 따르는 프로토콜의 버전을 상대방에게 말해주기 위한 수단이 된다.
- HTTP 로 대화하는 어플리케이션들에게 대화 상대의 능력과 메시지의 형식에 대한 단서를 제공해주기 위한 것이다.
헤더 #
- 요청과 응답 메시지에 추가 정보를 더한다.
- 헤더 분류
- 일반 헤더 : 요청과 응답 양쪽에 모두 나타날 수 있음.
- 요청 헤더 : 요청에 대한 부가 정보를 제공.
- 응답 헤더 : 응답에 대한 부가 정보를 제공.
- Entity 헤더 : 본문 크기와 콘텐츠, 혹은 리소스 그 자체를 서술.
- 확장 헤더 : 명세애 정의되지 않은 새로운 헤더.
- 헤더 분류
엔티티 본문 #
- HTTP 메시지의 세번째 부분은 선택적인 엔터티 본문
- 이미지, 비디오, HTML 문서, 소프트웨어 애플리케이션, 신용카드 트랜잭션, 전자우편 등 여러 종류의 디지털 데이터를 실어 나를 수 있다.
3.3 메서드 #
- 메서드 구분
메서드 | 설명 | 본문 포함 여부 |
---|---|---|
GET | 서버에서 어떤 문서를 가져온다. | X |
HEAD | 서버에서 어떤 문서에 대해 헤더만 가져온다. | X |
POST | 서버가 처리해야하 할 데이터를 보낸다. | O |
PUT | 서버에 요청 메시지의 본문을 저장한다. | O |
TRACE | 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다. | X |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다. | X |
DELETE | 서버에서 문서를 제거한다. | X |
3.4 상태 코드 #
- 상태코드 구분
상태코드 | 범위 | 분류 |
---|---|---|
100 ~ 199 | 100 ~ 101 | 정보 |
200 ~ 299 | 200 ~ 206 | 성공 |
300 ~ 399 | 300 ~ 305 | 리다이렉션 |
400 ~ 499 | 400 ~ 415 | 클라이언트 에러 |
500 ~ 599 | 500 ~ 505 | 서버 에러 |