[Network] HTTP 메세지

과꼴 취준·2025년 9월 3일

Network

목록 보기
3/5
post-thumbnail

1. HTTP 메세지 정의


HTTP메세지는 HTTP 프로토콜에서 서버와 클라이언트 간에 데이터를 교환하는 데 사용된다.
데이터들은 HTTP메세지TCP/IP 패킷캡슐화 되어 있다.

2. HTTP 메세지의 구조


요청메세지와 응답메세지의 구조는 닮았지만 본문은 약간 차이가 있다.

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

2.1 요청 메세지의 시작줄(Start Line,Request Line)

요청 메세지

사진 출처 https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages
   <1.method> <2.request-target(Path)> <3.protocol>
  1. http 메서드(method) : GET ,POST ,PUT ,DELETE,PATCH
  2. 요청 대상(request-target) : 보통 origin form 의 형태로 사용되는데 여기서는
    절대 경로 와 ?+문자열 쿼리 (key = value format) 가 온다 .
    보통 GET 와 많이 사용된다
  3. http 버전(protocol) : http 버전을 나타낸다. 버전이 다르면 http 메세지 구조가 달라진다.

2.2 응답 메세지 의 시작줄(StartLine,Status Line)

응답 메세지

    <1.protocol> <2.status-code> <3.status-text> 
  1. http 버전(protocol) : http 버전을 나타낸다. 버전이 다르면 http 메세지 구조가 달라진다.
  2. http 상태 코드(status-code) :요청의 성공 또는 실패 여부를 나타내는 숫자 상태 코드
    • 2xx : 요청 정상 처리(Successful)
    • 3xx : Redirection
      • 클라이언트의 요청을 완료하려면 유저 에이전트(대부분 브라우저) 의 추가조치가 필요한 경우
    • 4xx : 클라이언트 오류(Client Error)
      • 클라이언트 가 서버에 요청을 할수가 없어서 발생하는 오류
    • 5xx : 서버 오류(Server Error)
      • 클라이언트의 요청을 서버에서 처리를 못해서 발생하는 오류
  3. 이유 문구(status-text): 사람이 이해할 수 있는 짧은 상태 코드 설명 글

2.3 헤더 (Headers)

  • 요청 헤더는 요청에 추가적인 부가정보를 제공한다
  • ex) 메세지 바디의 내용, 메세지 바디크기, 압축정보, 인증, 요청클라이언트, 서버 정보, 캐시관리 정보, 보안, 쿠키 ..
  • 수많은 표준 헤더가 존재한다. 여기서 몇가지 정리해보자

2.3.1 헤더 context 에 따른 그룹핑

  1. Request Headers (요청 헤더) 클라이언트 -> 서버
    ex) HOST, User-Agent, Authorization, Accept
  2. Response Headers (응답 헤더) 서버 -> 클라이언트
    ex) Server, Set-Cookies, Location
  3. Representation(본문 관련 헤더)
    메세지 바디 의 데이터를 해석할수있는 정보를 제공
    ex) content-Type, content-lanth, content-Encoding
  4. Control/Genaral Headers (일반/제어 헤더)
    요청/응답 양쪽에서 다 쓰일수 있는 공통 헤더
    ex) Connection, Cache-Control ,Data

2.3.2 헤더 표준 스펙

1. Representation

google 에 네이버를 검색했을때)
  • Context-Type : 표현 데이터 형식
  • Context-Encoding : 표현 데이터의 압축방식
    • 데이터를 읽는 쪽에서 Context-Encoding 정보로 압축해제
    • gzip, deflate, identity
  • Content-Language : 표현 데이터의 자연 언어
    • 다중언어를 지원할수 있다 ko,en ...
  • Content-Lenghth : 표현 데이터의 길이
    • 10진수 바이트 단위로 나타낸다

2. 컨텐츠 협상(Content Negotiation)

---start line---
GET /index.html HTTP/1.1
---header----
Host: example.com
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.7
Accept-Encoding: gzip, br
  • Accept: 클라이언트가 선호하는 MIME 타입 전달
    • 구체적일수록 우선순위가 높다
  • Accept-Charset: 클라이언트가 지원 하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 지원 하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 언어
    • 0~1사이의 숫자가 부여되는데 숫자가 클수록 우선순위가 높다
      (ko-US>ko>en-US ...)

3. 범위(Range)

//request 메세지
GET /video.mp4 HTTP/1.1
Host: example.com
Range: bytes=500000-4999999 //50000 부터 마저 다운로드 받기
//response 메세지
HTTP/1.1 206 Partial Content
Content-Range: bytes 500000-4999999/5000000 //전체 리소스 범위중 특정 리소스 범위
Content-Length: 4500000
Content-Type: video/mp4

[500,000 바이트부터 끝까지 데이터]
만약 파일을 다운로드 받다가 중간에 끊겨서 남은부분만 다운로드 받으려는 상황 즉, 전체 리소스가 아니라 일부분만 내려받고 싶을 때
  • Range : 클라이언트가 서버에 요청하는 리소스 범위
  • Content-Range : 전체 리소스 범위중 특정 리소스의 범위

4. 요청 컨텍스트(Request Context Header)

---start line---
POST /signup HTTP/1.1 <-요청 메세지
---header----
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
Referer: https://example.com/register
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
---body----
email=user@example.com&name=JuJae
  • Form : 유저 에이전트의 이메일 정보
  • Host : 요청한 호스트의 정보(도메인)
    • Referer 와 함께 거의 요청메세지에서 필수이다
    • 하나의 서버(IP) 가 여러개의 도메인을 처리해야할때
  • User-Agent: 유저 에이전트의 애플리케이션 정보
  • Referer : 현재페이지 기준 이전의 웹 페이지 주소

5. 응답 컨텍스트(Response Context Header)

---start line---
HTTP/1.1 503 Service Unavailable <-응답 메세지
---header----
Date: Thu, 05 Sep 2025 10:45:00 GMT //http메세지가 생성된 시각을 나타내는 헤더
Server: Apache/2.4.54 (Ubuntu)
Allow: GET, HEAD, OPTIONS
Retry-After: 120
// 서버가 일시적으로 사용 불가능합니다. 2분 후 다시 시도하세요
Content-Type: text/html; charset=UTF-8
Content-Length: 85
---body----
<html>
  <body>
    <h1>503 Service Unavailable</h1>
    <p>서버가 일시적으로 사용 불가능합니다. 2분 후 다시 시도하세요.</p>
  </body>
</html>
  • Allow : 허용 가능한 HTTP메서드
    • 주로 405 (Method Not Allowed Error)에서 응답에 포함
  • Server : 요청을 처리하기 위한 오리진 서버에 의해 사용되는 소프트웨어 정보
  • Retry-After : 서버가 현재 요청을 처리할수 없을때 , 클라이언트에 재시도 시점을 안내
    • 주로 503(Service Unavailable)와 많이 사용된다
  • Location : 페이지를 리다이렉트할 URL을 응답
    • 3xx 상태 코드일경우, 응답에 Location 헤더가 존재하면 Location위치로 자동이동
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page

6. 인증 헤더(Authorization Header)

  • Authorization : 클라이언트 인증 정보를 서버에 전다
  • WWW-Authenticate : 리소스 접근시 사용되어야하는 인증 메서드 정의
    • 401 (Unauthorized) 응답과 함께 사용된다

7. 쿠키 헤더(Cookie Header)

HTTP 쿠키(Cookie)
  • Set-Cookie : 서버에서 클라이언트로 쿠키 전달(response)
  • Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP요청이 올때마다 서버로 전달

2.4 CRLF

헤더와 바디를 구분해주는 줄바꿈(CRLF) 이 있다.

2.5 메세지 바디(body)

  • 실제 전송할 데이터
    • http메서드 POST ,PUT ,PATCH 요청만 body 를 가진다.
      • GET 도 표준 스펙에서 가질수는 있으나 , 보편적인경우에는 시작줄(Start line)에서 절대경로/?quary 의 형태로 사용된다
    • HTML 문서, 이미지, 영상,JSON 등 모든 데이터 전송가능
profile
취업 엑조디아 모으기

0개의 댓글