HTTP 메세지는 HTTP 애플리케이션 간에 주고받은 데이터의 블록들이다.
인바운드
방향이라고 한다.아웃바운드
라고 한다.HTTP 메세지는 강물과 같이 흐른다.
HTTP 메세지는 단순한, 데이터의 구조화된 블록이다.
크게 세 부분으로 시작줄
, 헤더 블록
, 본문
으로 나뉜다.
시작줄
은 어떤 메세지인지 서술한다.헤더 블록
은 메세지의 속성을 보여준다.본문
은 데이터를 담고 있다. 이는 생략될 수 있다.시작줄
과 헤더
는 그냥 줄 단위로 분리된 아스키 문자열이다.
각 줄은 캐리지 리턴
과 개행 문자
로 구성된 두 글자의 줄바꿈 문자열로 끝난다.
헤더는 본문에 대한 많은 정보를 제공한다.
Content-Type
속성은 본문이 무엇인지 말해준다. (ex. text 문서)Content-Length
속성은 본문의 크기를 말해준다.모든 HTTP 메시지는 요청 메세지, 응답 메시지 둘 중 하나로 분류된다.
<메서드> <요청 URL> <버전>
<헤더>
<엔티티 본문>
<버전> <상태 코드> <사유 구절>
<헤더>
<엔티티 본문>
클라이언트 측에서 서버에게 요청하는 동작이다.
메서드의 종류는 아래의 표에서 확인할 수 있다.
메서드 | 설명 | 메세지 본문이 있는가? |
---|---|---|
GET | 어떤 문서를 가져온다. | 없음 |
HEAD | 어떤 문서에 대한 헤더만 가져온다. | 없음 |
POST | 처리해야 할 데이터를 보낸다. | 있음 |
PUT | 서버에 요청 메세지의 본문을 저장한다. | 있음 |
TRACE | 메세지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다. | 없음 |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다. | 없음 |
DELETE | 서버에서 문서를 제거한다. | 없음 |
확장 메서드
가 존재할 수 있다.요청 대상이 되는 리소스를 지칭하는 URL이다.
해당 메세지에서 사용 중인 HTTP의 버전이다.
HTTP/<메이저>,<마이너>
위와 같은 형식으로 이루어져있다.
요청 중에 무엇이 일어났는지 설명하는 세 자리의 숫자이다.
첫 번째 자릿수는 상태의 일반적인 분류('성공', '에러')를 나타낸다.
HTTP/1.0 200 OK
여기서 200
이 상태코드이다.
전체 범위 | 분류 |
---|---|
100-199 | 정보 |
200-299 | 성공 |
300-399 | 리다이렉션 |
400-499 | 클라이언트 에러 |
500-599 | 서버 에러 |
가장 흔한 상태 코드
200
은 성공을 의미하는 상태코드이다.401
은 사용자 이름과 비밀번호를 입력해야 된다고 알려주는 상태코드이다.404
은 요청한 URL에 해당하는 리소스가 존재하지 않음을 알리는 상태코드이다.숫자로 이루어진 상태 코드의 의미를 설명하는 짧은 문구이다.
상태 코드 이후부터 줄바꿈 문자열까지 사유 구절
이다.
이름, 콜론, 선택적인 공백, 값, CRLF가 순서대로 나타난다.
헤더 목록의 끝과 엔티티 본문의 시작을 표시한다.
헤더 분류
일반 헤더
: 요청과 응답 양쪽에 모두 나타날 수 있음요청 헤더
: 요청에 대한 부가 정보를 제공응답 헤더
: 응답에 대한 부가 정보를 제공엔티티 헤더
: 본문 크기와 콘텐츠, 혹은 리소스 그 자체를 서술확장 헤더
: 명세에 정의되지 않은 새로운 헤더임의의 데이터 블록을 포함한다.
이는 생략될 수 있다.