본문으로 건너뛰기

3장 HTTP 메시지

3.1 메시지의 흐름​

HTTP 메시지: HTTP 애플리케이션 간에 주고받은 데이터의 블록

  • 메시지의 내용과 의미를 설명하는 텍스트 메타 정보로 시작하고 그 다음에 선택적으로 데이터가 올 수 있음

3.1.1 메시지는 원 서버 방향을 인바운드로 하여 송신된다​

inbound-outbound

트랜잭션 방향

  • 인바운드: 메시지가 원 서버로 향하는 것
  • 아웃바운드: 모든 처리가 끝난 뒤에 메시지가 사용자 에이전트로 돌아오는 것

3.1.2 다운스트림으로 흐르는 메시지​

downstream

요청/응답에 관계없이 모든 메시지는 다운스트림으로 흐름

3.2 메시지의 각 부분​

메시지

  • 시작줄: 어떤 메시지인지 서술
  • 헤더 블록: 속성을 담음
    • 줄 단위로 분리된 아스키 문자열
    • 각 줄은 캐리지 리턴과 개행 문자로 구성된 두 글자의 줄바꿈 문자열로 끝남
    • 이 줄바꿈 문자열은 ‘CRLF’라고 씀
    • 견고한 애플리케이션이라면 개행 문자도 받아들일 수 있어야 함
    • 잘못 만들어진 HTTP 애플리케이션들 중에서는 캐리지 리턴과 개행 문자 모두를 항상 전송하지는 않는 것들도 있음
  • 본문: 데이터를 담음 → 없을 수 있음
    • 엔티티 본문이나 메시지 본문은 단순히 선택적인 데이터 덩이리
    • 텍스트나 이진 데이터를 포함할 수도 있고 그냥 비어있을 수도 있음

3.2.1 메시지 문법​

요청 메시지의 형식

<메서드> <요청 URL> <버전>

<헤더>

<엔티티 본문>

응답 메시지의 형식

<버전> <상태 코드> <사유 구절>

<헤더>

<엔티티 본문>

메서드

  • 클라이언트 측에서 서버가 리소스에 대해 수행하길 바라는 동작(GET, HEAD, POST)

요청 URL

  • 요청 대상이 되는 리소스를 지칭하는 완전한 URL 혹은 URL 경로 구성요소

버전

  • 해당 메시지에서 사용 중인 HTTP 버전

상태 코드

  • 요청 중에 무엇이 일어났는지 설명하는 세 자리의 숫자

사유 구절

  • 숫자로 된 상태 코드의 의미를 사람이 이해할 수 있게 설명하는 짧은 문구

헤더

  • 이름, 콜론(:), 선택적인 공백, 값, CRLF가 순서대로 나타나는 0개 이상의 헤더들
  • 이 헤더의 목록은 빈줄(CRLF)로 끝나 헤더 목록의 끝과 엔티티 본문의 시작을 표시
  • HTTP/1.1과 같은 몇몇 버전의 HTTP는 요청이나 응답에 어떤 특정 헤더가 포함되어야만 유효한 것으로 간주

엔티티 본문

  • 엔티티 본문은 임의의 데이터 블록을 포함
  • 헤더나 엔티티 본문이 없더라도 HTTP 헤더의 집합은 항상 빈 줄(CRLF)로 끝나야 함

3.2.2 시작줄​

  • 요청 메시지의 시작줄: 무엇을 해야 하는지
  • 응답 메시지의 시작줄: 무슨 일이 일어났는지

요청줄

  • 요청 메시지: 서버에게 리소스에 대해 무언가를 해달라고 부탁
  • 요청 메시지의 시작줄/요청줄
    • 서버에서 어떤 동작이 일어나야 하는지 설명해주는 메서드와 그 동작에 대한 대상을 지칭하는 요청 URL이 들어있음
    • 클라이언트가 어떤 HTTP 버전으로 말하고 있는지 서버에게 알려주는 HTTP 버전도 포함
    • 모든 필드는 공백으로 구분

응답줄

  • 응답 메시지: 수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에게 돌려줌
  • 응답 메시지의 시작줄/응답줄
    • 응답 메시지에서 쓰인 HTTP의 버전, 숫자로 된 상태 코드, 수행 상태에 대해 설명해주는 텍스트로 된 사유 구절
    • 모든 필드는 공백으로 구분

메서드

메서드설명메시지 본문이 있는가?
GET서버에서 어떤 문서를 가져온다.없음
HEAD서버에서 어떤 문서에 대해 헤더만 가져온다.없음
POST서버가 처리해야 할 데이터를 보낸다.있음
PUT서버에 요청 메시지의 본문을 저장한다.있음
TRACE메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다.없음
OPTIONS서버가 어떤 메서드를 수행할 수 있는지 확인한다.없음
DELETE서버에서 문서를 제거한다.없음

상태 코드

전체 범위정의된 범위분류
100-199100-101정보
200-299200-206성공
300-399300-305리다이렉션
400-499400-415클라이언트 에러
500-599500-505서버 에러

3.2.3 헤더​

3.2.4 엔티티 본문​

3.2.5 버전 0.9 메시지​

3.3 메서드​

3.3.1 안전한 메서드(Safe Method)​

3.3.2 GET​

3.3.3 HEAD​

3.3.4 PUT​

3.3.5 POST​

3.3.6 TRACE​

3.3.7 OPTIONS​

3.3.8 DELETE​

3.3.9 확장 메서드​

3.4 상태 코드​

3.4.1 100-199: 정보성 상태 코드​

3.4.2 200-299: 성공 상태 코드​

3.4.3 300-399: 리다이렉션 상태 코드​

3.4.4 400-499: 클라이언트 에러 상태 코드​

3.4.5 500-599: 서버 에러 상태 코드​

3.5 헤더​

3.5.1 일반 헤더​

3.5.2 요청 헤더​

3.5.3 응답 헤더​

3.5.4 엔티티 헤더​

3.6 추가 정보​