HTTP 메시지 구조

2025. 1. 4. 15:03·컴퓨터 네트워크/응용계층

HTTP 메시지 구조

HTTP(‘Hypertext Transfer Protocol’) 메시지는 서버와 클라이언트가 웹 상에서 데이터를 주고받을 때 사용되는 표준 형식입니다. 크게 시작 라인, 필드 라인, 메시지 본문으로 구성됩니다.

  • 필드 라인(Header Line): 0개 이상의 HTTP 헤더가 포함될 수 있음
  • 메시지 본문(Message Body): 생략될 수도 있고, 다양한 콘텐츠 타입을 담을 수 있음
  • 필드 라인과 메시지 본문 사이에는 반드시 빈 줄(공백 줄) 하나가 들어갑니다.

아래 그림은 HTTP 메시지의 전반적인 구조를 보여줍니다.

image

(이미지 출처: 혼자 공부하는 네트워크)


1. 시작 라인 (Start Line)

시작 라인은 HTTP 요청 메시지인지 HTTP 응답 메시지인지에 따라 달라집니다.

  • 요청 메시지(Request Message) → 요청 라인(Request Line)
  • 응답 메시지(Response Message) → 상태 라인(Status Line)

image

(이미지 출처: 혼자 공부하는 네트워크)

1.1 요청 라인 (Request Line)

HTTP 요청 메시지의 시작 라인은 요청 라인(Request Line)이라고 하며, 다음과 같은 형식을 가집니다. 각 요소는 공백으로 구분됩니다.

요청 라인 = 메서드 <공백> 요청 대상 <공백> HTTP 버전 <줄바꿈>

(1) 메서드(Method)

  • 클라이언트가 서버의 자원(요청 대상)에 대해 수행할 작업을 명시합니다.
  • 대표적인 메서드:
    • GET: 리소스 요청 (서버에서 데이터를 조회)
    • POST: 리소스 생성 또는 서버에 데이터를 전송
    • PUT: 리소스 전체 교체
    • DELETE: 리소스 삭제
    • 그 외 HEAD, PATCH, OPTIONS 등이 존재

(2) 요청 대상(Request Target)

  • 클라이언트가 접근하고자 하는 서버 자원을 나타냅니다.
  • 일반적으로 경로(path) + 쿼리 파라미터(query string) 형태를 가집니다.
    • 예: http://www.example.com/hello?q=world → 요청 대상은 /hello?q=world
  • 최소한의 표기인 /을 포함해야 합니다.
    • 예: http://example.com → 요청 대상은 /

(3) HTTP 버전(HTTP-Version)

  • 사용 중인 HTTP 프로토콜의 버전을 명시합니다.
  • 예: HTTP/1.1, HTTP/2, HTTP/3 등 (RFC 문서를 통해서도 확인 가능)

1.2 상태 라인 (Status Line)

HTTP 응답 메시지의 시작 라인은 상태 라인(Status Line)이며, 다음과 같은 형식을 가집니다. 각 요소는 공백으로 구분됩니다.

상태 라인 = HTTP 버전 <공백> 상태 코드 <공백> 이유 구문(선택적) <줄바꿈>

  1. HTTP 버전(HTTP-Version)
    • 사용된 HTTP 프로토콜의 버전을 표기합니다.
  2. 상태 코드(Status Code)
    • 요청이 어떻게 처리되었는지를 알려주는 세 자리 정수입니다.
    • 범위에 따라 일반적인 의미가 구분됩니다.
      • 1xx: 정보 안내(Informational)
      • 2xx: 성공(Success)
      • 3xx: 리다이렉션(Redirection)
      • 4xx: 클라이언트 측 오류(Client Error)
      • 5xx: 서버 측 오류(Server Error)
  3. 이유 구문(Reason Phrase) (선택 항목)
    • 상태 코드에 대한 간단한 텍스트 설명입니다.
    • 예: HTTP/1.1 200 OK
      • 200은 요청이 정상 처리됨을 의미
      • OK는 상태 코드에 대한 설명(Reason Phrase)

상태 라인 예시

HTTP/1.1 200 OK
  • 200 코드는 요청이 성공적으로 처리되었음을 의미
HTTP/1.1 404 Not Found
  • 404 코드는 요청한 자원이 존재하지 않음을 의미

2. 필드 라인 (Field Line)

필드 라인에는 0개 이상의 HTTP 헤더(HTTP Header)가 명시됩니다. 이를 헤더 라인(Header Line)이라고 부르기도 합니다.

image

(이미지 출처: 혼자 공부하는 네트워크)

2.1 HTTP 헤더 (HTTP Header)

  • 헤더는 콜론(:)을 기준으로 헤더 이름(Header Name)과 헤더 값(Header Value) 형태로 구성됩니다.
  • 헤더는 추가적인 정보(metadata)를 전달하는 중요한 역할을 합니다.
    • 예: 메시지 인코딩, 캐싱 방법, 인증 정보, 콘텐츠 형식 등

image

(이미지 출처: 혼자 공부하는 네트워크)

(1) 예시 헤더

  • Host: 서버의 호스트 이름과 포트를 나타냄 (HTTP/1.1부터 필수)
  • Content-Type: 메시지 본문의 데이터 타입을 지정 (예: text/html; charset=UTF-8)
  • Content-Length: 메시지 본문의 길이를 바이트 단위로 표기
  • Connection: 연결 유지 여부, 예: keep-alive, close
  • Accept: 클라이언트가 처리할 수 있는 콘텐츠 타입 목록 (예: text/html, application/json)
  • User-Agent: 클라이언트(브라우저, 앱 등)의 정보
  • Accept-Language, Accept-Encoding, Cookie, Authorization 등 다양한 헤더가 존재

3. 메시지 본문 (Message Body)

메시지 본문은 요청 또는 응답에 담아야 할 추가 데이터가 있는 경우에 사용됩니다.

  • 본문이 반드시 필요한 메서드도 있지만(POST, PUT 등), 일반적으로 요청 라인과 헤더만으로 처리 가능한 메서드(GET, HEAD)도 있습니다.
  • 다양하고 복합적인 콘텐츠 타입(Content-Type)을 담을 수 있습니다. 예: application/json, text/html, multipart/form-data 등

아래 그림은 HTTP 메시지에서 본문이 어떻게 포함될 수 있는지를 보여줍니다.

image

(이미지 출처: 혼자 공부하는 네트워크)

image

(이미지 출처: 혼자 공부하는 네트워크)

3.1 본문 관련 추가 사항

  • 전송 코딩(Transfer-Encoding): 예를 들어, chunked 전송 방식을 사용할 경우 Content-Length 없이 여러 청크(Chunk)로 나누어 전송할 수 있음.
  • 요청 본문 vs. 응답 본문: 요청에서는 데이터를 서버로 전송하기 위해, 응답에서는 클라이언트로 데이터를 전송하기 위해 사용됨.

4. 공백 줄(빈 줄, CRLF)

시작 라인과 필드 라인들(헤더)의 구성이 끝난 뒤에는 빈 줄 하나(CR+LF, \r\n)가 들어갑니다. 그 후에 메시지 본문이 이어집니다.

  • 요청 또는 응답 메시지를 분석할 때, 이 빈 줄을 기준으로 헤더 부와 본문(body) 부를 구분할 수 있습니다.

5. 참고 문서

  • 혼자 공부하는 네트워크
  • RFC 7230, Section 3: Message Format
  • RFC 7231, Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
  • [MDN Web Docs - HTTP Messages](

'컴퓨터 네트워크 > 응용계층' 카테고리의 다른 글

HTTP 상태 코드  (0) 2025.01.07
HTTP 메서드  (0) 2025.01.04
HTTP의 특성  (1) 2025.01.04
자원을 식별하는 URI  (0) 2025.01.04
계층적 네임 서버  (0) 2025.01.04
'컴퓨터 네트워크/응용계층' 카테고리의 다른 글
  • HTTP 상태 코드
  • HTTP 메서드
  • HTTP의 특성
  • 자원을 식별하는 URI
iOS Developer
iOS Developer
myungsun-e 님의 블로그 입니다.
  • iOS Developer
    myungsun-e
    iOS Developer
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • 컴퓨터 네트워크 (11)
        • 응용계층 (11)
      • 운영체제 (14)
        • 운영체제 시작하기 (2)
        • 프로세스 상태와 계층 구조 (3)
        • 프로세스와 스레드 (1)
        • CPU 스케줄링 (3)
        • 동기화란 (2)
      • iOS (0)
        • Swift-문법 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SWIFT
    컴퓨터 네트워크
    IOS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
iOS Developer
HTTP 메시지 구조
상단으로

티스토리툴바