HTTP 3장 - 메시지

김태성·2022년 8월 1일
0

메시지의 흐름

  • HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터의 블록들이다.
  • 이 데이터의 블록들은 메시지의 내용과 의미를 설명하는 텍스트 메타 정보로 시작하고 그 다음에 선택적으로 데이터가 올 수 있다.

인바운드, 아웃바운드

  • 메시지가 클라이언트에서 서버로 향하는 것을 인바운드라고 한다.
  • 클라이언트의 요청을 처리하고 메시지가 서버에서 클라이언트로 다시 향하는 것을 아웃바운드라고 한다.

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

  • 다운스트림(downstream)은 하류라는 뜻을 가졌다. 데이터의 흐름을 물이 흐르는 원리와 비슷하게 설명한 것이다.
  • 물은 항상 상류에서 하류로 흐르듯이, 데이터도 항상 업스트림에서 다운스트림으로 흐른다.

메시지의 각 부분

  • 메시지는 세 부분으로 이루어져 있다. (시작줄, 헤더 블록, 본문)
  • 시작줄은 어떤 메시지인지 서술한다.
  • 헤더 블록은 속성 담고 있다.
  • 본문은 데이터를 담고 있거나 없을 수도 있다.

메서드
안전한 메서드

  • HTTP는 안전한 메서드라 불리는 메서드의 집합을 정의한다. 안전한 메서드는 GET과 HEAD 와 같이 서버의 상태를 변경시키지 않는 것을 의미한다.
  • 안전한 메서드가 서버의 상태를 변경시지지 않는다는 보장은 없다. 이는 개발자의 구현에 달렸기 때문이다.

GET

  • 서버에게 리소스를 달라고 요청하기 위해 사용한다.
  • HTTP/1.1은 서버가 이 메서드를 구현할 것을 요구한다.

HEAD

  • HEAD 메서드는 GET처럼 동작하지만, 서버는 응답으로 헤더만 돌려준다.
  • 리소스를 가져오지 않고도 그에 대해 무엇인가(타입이라던가)를 알아낼 수 있다.
  • 응답의 상태 코드를 통해, 개체가 존재하는지 확인할 수 있다.
  • 헤더를 확인하여 리소스가 변경되었는지 검사할 수 있다.

PUT

  • PUT 메서드는 서버의 상태를 변경한다.
  • 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재한다면 본문을 사용해서 교체하는 것이다.

POST

  • 서버에 입력 데이터를 전송하기 위해 설계되었다.
  • POST는 서버에 데이터를 보내기 위해 사용하고, PUT은 서버에 있는 리소스에 데이터를 입력하기 위해 사용한다.

TRACE

  • 클라이언트의 요청은 방화벽, 프록시, 게이트웨이 등의 애플리케이션을 통과할 수 있는데, 각 구간은 원래의 HTTP 요청을 수정할 수 있다.
  • TRACE 요청은 목적지 서버에서 루프백(loopback) 진단을 시작한다. 요청 전송의 마지막 단계에 있는 서버는 자신이 받은 요청 메시지를 본문에 넣어 TRACE 응답을 되돌려준다.
  • 클라이언트는 자신과 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지가 망가졌거나 수정되었는지, 만약 그렇다면 어떻게 변경되었는지 확인할 수 있다.
  • TRACE 요청은 주로 진단을 위해 사용하지만, HTTP 애플리케이션에 따라 각 메서드가 다르게 동작할 수 있으므로 주의해야 한다.
  • TRACE 요청은 어떠한 엔티티 본문도 보낼 수 없고, 응답의 엔티티 본문에는 서버가 받은 요청이 그대로 들어있다.

OPTIONS

  • 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 질의한다.

DELETE

  • 서버에게 요청 URL로 지정한 리소스를 삭제하도록 요청한다.

헤더

일반 헤더 (General Headers)

  • 일반 헤더는 클라이언트와 서버 양쪽 모두에서 사용한다.
  • 클라이언트, 서버, 여러 애플리케이션들을 위해 다양한 목적으로 사된다.

요청 헤더 (Request Headers)

  • 요청 메시지를 위한 헤더이다.
  • 서버에게 클라이언트가 받고자 하는 데이터의 타입이 무엇인지와 같은 부가 정보를 제공한다.

응답 헤더 (Response Headers)

  • 응답 메시지는 클라이언트에게 정보를 제공하기 위한 자신만의 헤더를 갖고 있다.

엔티티 헤더 (Entity Headers)

  • 엔티티 본문에 대한 헤더를 말한다. 예를 들어, 엔티티 헤더는 엔티티 본문에 들어있는 데이터의 탕비이 무엇인지 말해줄 수 있다.
profile
@flip_404

0개의 댓글