[HTTP 완벽 가이드] 03장. HTTP 메시지

정은아·2024년 10월 8일
post-thumbnail

1부 HTTP : HTTP 메시지

03. HTTP 메시지


🔔 HTTP 메시지는 HTTP 애플리케이션 간에 주고 받은 데이터의 블록들이다.
     클라이언트, 서버, 프록시 사이를 흐른다.

🎨 01. 메시지 방향을 의미하는 용어

  • 인바운드
  • 아웃바운드
  • 업스트림
  • 다운스트림

📌 01-1. 메시지는 원 서버 방향을 인바운드로 하여 송신된다.

🔔 원 서버란 전 세계에서 동시에 사용 가능한 하나의 서버를 뜻한다.

  • 메시지가 원 서버로 향하는 것은 인바운드로 이동하는 것을 말한다.
  • 모든 처리가 끝난 뒤에 메시지가 사용자 에이전트로 돌아오는 것은 아웃바운드로 이동하는 것을 뜻한다.

📌 01-2. 다운스트림으로 흐르는 메시지

  • HTTP 메시지는 강물과 같이(위에서 아래로) 흐른다.
  • 요청 메시지냐 응답 메시지냐에 관계없이 모든 메시지는 다운스트림으로 흐른다.
  • 메시지의 발송자는 수신자의 업스트림이다.
  • 요청에서는 프락시1이 프락시3의 업스트림이지만, 응답에서는 프락시3이 프락시1의 업스트림이다.


🎨 02. 메시지의 각 부분

  • HTTP 메시지는 클라이언트로부터의 요청이나 서버로부터의 응답 중 하나를 포함한다.
  • 메시지는 시작줄, 헤더 블록, 본문 이렇게 세 부분으로 이루어진다.
  • 시작줄과 헤더는 그냥 줄 단위로 분리된 아스키 문자열이다. 각 줄은 캐리지 리턴(ASCII 13)과 개행 문자(ASCII 10)로 구성된 두 글자의 줄바꿈 문자열로 끝난다. 이 줄바꿈 문자열은 'CRLF'라고 쓴다.

CRLF는 Carriage Return (ASCII 13)과 Line Feed (ASCII 10)의 합성어로, 다음 줄로 넘어가기 위해 커서를 한 줄 아래로 이동 시키고(Line Feed) 가장 앞으로 옮기는 것(Carriage Return)을 뜻한다.

🔔 요청 메시지의 형식
<메서드> <요청 URL> <버전>
<헤더>
(개행)
<엔티티 본문>

🔔 응답 메시지의 형식
<버전> <상태 코드> <사유 구절>
<헤더>
(개행)
<엔티티 본문>

  • 메서드는 클라이언트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작이다.
  • 요청 URL은 리소스를 지칭하는 완전한 URL 혹은 URL의 경로 구성요소이다.

📌 02-1. 시작줄

  • 모든 HTTP 메시지는 시작줄로 시작한다.
  • 요청 메시지의 시작줄은 무엇을 해야 하는지 말해준다.
  • 응답 메세지의 시작줄은 무슨 일이 일어났는지 말해준다.

📌 02-2. 메서드

📌 02-3. 상태코드

  • 상태 코드는 각 응답 메시지의 시작줄에 담겨 반환된다.
  • 숫자로 된 코드 + 문자열로 된 사유 구절로 서로 일대일 대응한다.

🎨 03. 헤더

  • 특정 종류의 메시지만 사용할 수 있는 헤더, 더 일반 목적으로 사용할 수 있는 헤더, 그리고 응답과 요청 메시지 양쪽 모두에서 정보를 제공하는 헤더로 나뉜다.
  • 헤더는 크게 다섯가지로 분류된다.

📌 03-1. 일반 헤더(General Headers)

  • 일반 헤더는 응답 메시지 모두에서 사용되지만 컨텐츠 자체에는 적용되지 않는 HTTP 헤더이다.
  • 클라이언트, 서버, 그리고 어딘가에 메시지를 보내는 다른 애플리케이션들을 위해 다양한 목적으로 사용된다.
  • 가장 흔한 general 헤더는 Date, Cache-Control 및 Connection 이다.

📌 03-2. 요청 헤더(Request Headers)

  • 요청 헤더는 HTTP 요청에서 사용되지만 메시지의 컨텐츠와는 관련이 없는 HTTP 헤더이다.
  • 서버에게 클라이언트가 받고자 하는 데이터의 타입이 무엇인지와 같은 부가 정보를 제공한다.
  • Accept, Accept-, If-와 같은 요청 헤더들은 조건부 요청 수행을 허용한다.
  • Cookie, User-Agent (en-US), Referer와 같은 다른 것들은 컨텍스트를 정확히 나타내어 서버가 응답에 맞출 수 있게한다.

📌 03-3. 응답 헤더(Response Headers)

  • 응답 헤더는 HTTP 응답에서 사용될 수 있는 HTTP 헤더이며, 메시지의 컨텐츠와는 관련 X
  • Age, Location (en-US) 또는 Server와 같은 응답 헤더는 더 상세한 응답의 컨텍스트를 제공하기위해 사용된다.

📌 03-4. 엔티티 헤더(Entity Headers)

  • 엔티티 헤더는 메시지 바디의 컨텐츠를 나타내는 HTTP 헤더이다.
  • 엔티티 헤더는 HTTP 요청 및 응답 모두에서 사용된다. Content-Length, Content-Language, Content-Encoding과 같은 헤더는 엔티티 헤더이다.
  • 본문에 들어있는 데이터의 타입이 무엇인지 말해준다.

📌 03-5. 확장 헤더(Extension Headers)

  • 애플리케이션 개발자들에 의해 만들어졌지만 아직 승인된 HTTP 명세에는 추가되지 않은 비표준 헤더이다.
  • HTTP 프로그램은 확장 헤더들에 대해 설령 그 의미를 모른다 할지라도 용인하고 전달해야 할 필요가 있다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글