HTTP Message Structure

heiler·2025년 4월 26일

Web

목록 보기
1/1

HTTP 요청-응답 메시지 구조

출처: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages

HTTP 요청-응답 메시지는 크게 Start Line, Headers, Body 3개의 구성요소로 이루어져 있다.

각 구성요소는 어떤 정보를 담고 있는지 살펴보자.

✅ Start line

HTTP 패킷의 최상단에 위치하여 메시지의 핵심 목적과 상태를 가장 먼저 전달하는 역할을 한다.

  • 요청 메시지: <method> <request-target> <protocol>

    • method
      • HTTP method의 종류는 대표적으로 GET, POST, PUT, DELETE, PATCH가 있고 그 외 HEAD, CONNECT, OPTIONS, TRACE도 존재한다.
    • request-target
      • 접근하려는 URL 주소의 절대 경로 혹은 상대 경로를 의미한다.
    • protocol
      • 사용하는 통신 프로토콜 방식과 버전 정보가 포함된다.
    • ex. POST /admin HTTP/1.1
  • 응답 메시지: <protocol> <status-code> <status-text>

    • protocol
      • 사용하는 통신 프로토콜 방식과 버전 정보가 포함된다. 요청 메시지와 동일하다.
    • status-code
      • 요청에 대한 서버의 결과를 숫자로 나타낸 것이다.
    • status-text
      • status-code에 대한 간단한 텍스트 설명을 포함한다.
      • status-code는 숫자로면 표현되어 있어 사람이 직관적으로 이해하기 어려우므로, 사람이 쉽게 이해할 수 있도록 돕는 역할을 한다.
    • ex. HTTP/1.1 200 OK

✅ Headers

메시지를 설명하는 메타데이터들이 담겨있다.

▶️ General header (요청-응답 메시지 공통)

요청, 응답에서 공통으로 사용하는 정보.

  • Date
    • 메시지를 생성한 날짜
    • ex. Date: Mon, 18 Jul 2016 16:06:00 GMT
  • Connection
    • 클라이언트와 서버 간 연결 옵션
    • ex. Connection: keep-alive, Connection: close
  • Cache-Control
    • 응답에 대한 캐싱 정책 지정
    • ex. Cache-Control: no-cache,Cache-Control: max-age=3600

등이 포함된다.

▶️ Representation Headers (요청-응답 메시지 공통)

Body로 전송되는 데이터의 메타데이터를 포함한다.

  • Content-Type
    • Body에 담긴 데이터의 타입
    • ex. Content-Type: application/json, Content-Type: application/x-www-form-urlencoded
  • Content-Length
    • Body에 담긴 데이터의 크기(단위: byte)
    • ex. Content-Length: 20
  • Content-Disposition
    • 브라우저가 서버에서 받은 컨텐츠를 어떻게 처리해야 할지 알려주는 역할. 주로 파일 다운로드, 폼 데이터 전송할 때 사용한다.
  1. Body에 하나의 파일을 담아 응답하는 경우(attachment)
	HTTP/1.1 200 OK
	Content-Type: application/pdf
	Content-Disposition: attachment; filename="example.pdf"
	
	%PDF-1.4
	...PDF 파일의 바이너리 데이터...
  1. Body에 두 종류 이상의 데이터를 담아 응답하는 경우(multipart/form-data)
HTTP/1.1 200 OK
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="text1"

Hello, this is text data.
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file1"; filename="example.txt"
Content-Type: text/plain

This is the content of example.txt file.
------WebKitFormBoundary7MA4YWxkTrZu0gW--

등이 포함된다.

▶️ Request Headers (요청 메시지에만 포함)

아래는 HTTP 요청 메시지에서 주로 사용하는 헤더 필드들이다.

  • Host
    • 요청할 호스트명 및 포트번호
    • ex. Host: www.heiler.com
  • User-Agent
    • 클라이언트의 소프트웨어 정보
    • ex. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
  • Accept
    • 클라이언트가 응답으로 받고 싶은 컨텐츠 타입(MIME type)을 지정한다
    • ex. Accept: text/html, application/json
  • Accept-Language
    • 클라이언트가 지원 가능한 언어
    • ex. Accept-Language: en-US,en;q=0.5
  • Cookie
    • 인증에 필요한 쿠키 정보

▶️ Response Headers (응답 메시지에만 포함)

아래는 HTTP 응답 메시지에서 주로 사용하는 헤더 필드들이다.

  • Server
    • 웹 서버의 소프트웨어 종류
    • ex. Server: Apache/2.4.1 (Unix)
  • Set-Cookie
    • 생성된 쿠키 정보
    • ex. Set-Cookie: my-key=my value; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; HttpOnly
  • Etag
    • 응답 리소스의 버전을 식별할 수 있는 고유 태그(캐싱 최적화에 사용)

✅ Request/Response Body

요청 메시지는 HTTP method가 PATCH, POST, PUT인 경우에만 Body를 포함한다.

응답 메시지는 클라이언트의 요청에 대한 적절한 리소스를 Body에 담고 있다.

Reference

profile
Smiley

0개의 댓글