03. HTTP 메시지

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 서버 에러