HTTP 메세지

고먐미·2023년 3월 2일
0

HTTP 에 대해서는 이전 글에서 간략하게 알아보았습니다.
이번에는 서버와 클라이언트 간에 어떻게 HTTP를 통해 데이터를 교환하는지 알아보도록 합시다..

HTTP 메세지

HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다.

HTTP 메세지의 두 가지 타입

  • 요청 (request)
  • 응답 (response)

요청(request)은 클라이언트가 서버로 전달해 서버의 액션이 일어나게끔 하는 메세지입니다.
응답(response)는 요청에 대한 서버의 답변입니다.

HTTP 의 요청과 응답의 구조는 서로 닮았으며, 그 구조는 다음과 같습니다.

  1. 시작 줄(start-line)에는 실행되어야 할 요청 or 요청 수행에 대한 성공/실패가 기록되어 있습니다. 이 줄은 항상 한 줄로 끝납니다.
  1. 옵션으로 HTTP 헤더 세트가 들어갑니다. 여기에는 요청에 대한 설명 or 메세지 본문에 대한 설명이 들어갑니다.
  1. 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입됩니다.
  1. 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나 응답과 관련된 문서(document)가 들어갑니다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시됩니다.

이처럼 HTTP 메세지의 시작 줄과 HTTP 헤더를 묶어 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메세지의 페이로드는 본문(body)이라고 합니다.


HTTP 요청

HTTP 요청은 서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메세지입니다.

시작줄 (request line)

시작 줄에는 세 가지 요소가 있습니다.

  1. 첫 번째 요소
    HTTP method 입니다.
    수행할 작업(GET, PUT, POST 등)이나 방식(HEAD, OPTIONS)을 설명합니다.

  2. 두 번째 요소
    요청 타겟(주로 URL/URI) 또는 프로토콜, 포트, 도메인의 절대경로로 나타낼 수 있습니다.
    이는 요청 컨텍스트에 의해 특정됩니다.
    또한, 요청 타겟 포맷은 HTTP 메소드에 따라 달라집니다.

요청 타겟 포맷의 종류

  • origin 형식
    형식 끝에 ?와 쿼리 문자열이 붙는 절대 경로.
    가장 일반적인 형식이며, GET, POST, HEAD, OPTIONS 메서드와 함께 사용
  • absolute 형식
    완전한 URL 형식
    프록시에 연결하는 경우에는 대부분 GET과 함께 사용됨
  • authority 형식
    도메인 이름 및 옵션포트(:가 앞에 붙음)로 이루어진 URL의 athority component
    HTTP 터널을 구축하는 경우에만 CONNECT와 함께 사용 가능
  • asterisk 형식
    OPTIONS와 함께 * 하나로 간단하게 서버 전체를 나타냄
  1. 세 번째 요소
    HTTP의 버전입니다.
    메세지의 남은 구조를 결정하기 때문에 응답 메세지에서 써야할 HTTP 버전을 알려주는 역할을 합니다.

헤더 (Headers)

요청 헤더는 기본 구조를 따릅니다.
대소문자 구분 없는 문자열 다음에 콜론(:)과 값을 입력합니다.
이 때, 값은 헤더에 따라 달라집니다.

요청 헤더의 종류

  • General 헤더
    via와 같은 헤더는 메세지 전체에 적용됨
  • Requset 헤더
    User-Agent, Accept-type와 같은 헤더는 요청의 내용을 구체화시킴 (Accept-Language)
    컨텍스를 제공하기도 함 (Referer)
    조건에 따른 제약사항을 가하기도 함 (If-None)
    요청 내용을 수정함
  • Entity 헤더
    Content-Length와 같은 헤더는 요청 본문에 적용됨
    요청 내 본문이 없을 시 entity 헤더는 전송되지 않음

본문 (body)

본문은 요청의 마지막 부분에 들어갑니다.
GET, HEAD, DELETE, OPTIONS 처럼 리소스를 가져오는 요청은 보통 본문이 필요없기 때문에 모든 요청에 본문이 들어가지는 않습니다.
일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송합니다. (보통 HTML 폼 데이터를 포함하는 POST 요청일 경우)


HTTP 응답

상태 줄 (status line)

상태 줄은 다음과 같은 정보를 가지고 있습니다.

  1. 프로토콜 버전 (보통 HTTP/1.1)
  2. 상태 코드 (요청 성공 여부를 나타냄)
  3. 상태 텍스트 (HTTP 메세지를 이해할 때 도움이 됨)

헤더 (headers)

요청 헤더와 동일한 구조를 따릅니다.
대소문자 구분 없는 문자열 다음에 콜론(:)과 값을 입력합니다.
이 때, 값은 헤더에 따라 달라집니다.

응답 헤더의 종류

  • General 헤더
    via와 같은 헤더는 메세지 전체에 적용됨
  • Response 헤더
    VaryAccept-Ranges와 같은 헤더는 서버에 대한 추가 정보를 제공함
    (상태 줄에 미처 들어가지 못한 서버 정보)
  • Entity 헤더
    Content-Length와 같은 헤더는 요청 본문에 적용됨
    요청 내 본문이 없을 시 entity 헤더는 전송되지 않음

본문 (body)

본문은 응답의 마지막 부분에 들어갑니다.
201, 204과 같은 상태 코드를 가진 응답에는 보통 본문이 없기 때문에 모든 응답에 본문이 들어가지는 않습니다.

응답에서 본문의 종류

  • 이미 길이가 알려진 단일 파일로 구성된 단일-리소스 본문
    헤더 두개(Content-TypeContent-Length)로 정의
  • 길이를 모르는 단일 파일로 구성된 단일-리소스 본문
    Transfer-Encodingchunked로 설정되어 있음
    파일은 청크로 나뉘어 인코딩 되어 있음
  • 서로 다른 정보를 담고 있는 멀티파트로 이루어진 다중 리소스 본문
    이 경우는 상대적으로 위의 두 경우에 비해 보기 힘듦

HTTP 에 대해 설명해주세요!
클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜입니다.
특징으로는 단방향성, 비연결성, 무상태성이 있고, 실시간 통신이 어렵습니다.

HTTP 메세지에 대해 알고 있나요?
HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식으로, 요청응답 두 가지 타입이 있습니다.

요청과 응답에 대해 조금 더 설명해 주실 수 있나요?
요청은 클라이언트가 서버로 전달해 서버의 액션이 일어나게끔 하는 메세지입니다.
응답은 요청에 대한 서버의 답변입니다.
이 두 가지 HTTP 메세지 구조는 크게 시작줄(start-line), 헤더(headers), 본문(body)으로 나뉘어져 있습니다.

profile
개념을 이해하고 다른사람에게도 알려줄 수 있는 개발자가 되고 싶어요..

0개의 댓글