본문 바로가기
HTML, CSS, WEB 기술

HTTP 메시지 구조를 이해해 보자

by Developer88 2023. 12. 19.
반응형

오늘은 HTTP 메시지 구조에 대해서 정리해 보도록 하겠습니다.

메시지 구조에 대해 알아보기 전에, HTTP에 대해서도 간단히 알아보고 가겠습니다.

 

1. HTTP

1-1. HTTP의 의미

HTTP(HyperText Transfer Protocol)는,

네트워크 위에서 데이터를 주고받는 방식을 정의합니다.

웹 브라우저에 URL을 입력할 때마다 HTTP가 동작해서,

원하는 웹 페이지의 데이터를 요청하고 받아오는 것이죠.

 

심플하면서도 다양한 데이터 형식을 지원하고,
새로운 기능을 쉽게 추가할 수 있어서,

빠르게 변하는 인터넷 환경에 잘 적응할 수 있었는데요.

이로인해 HTTP는 웹 통신의 표준으로 자리 잡았습니다.

 

모든 웹 브라우저와 서버가 이 프로토콜을 사용하여 정보를 주고받기 때문에, 

웹의 보편적인 언어라고 할 수도 있습니다.

 

1-4. HTTP2 와 HTTPS

이후 시간이 지나면서, 성능을 개선한 HTTP2가 나왔구요,

보안을 강화한 HTTPS도 나왔습니다.

이제 대부분의 브라우저는 HTTPS가 아닐 경우, 보안상의 위험을 표시합니다.

하지만, HTTP는 여전히 기존의 웹 인프라와의 호환성을 유지하고 있습니다.

 

2. HTTP 메시지의 기본구조

2-1. HTTP메시지의 두가지 종류

HTTP의 통신은 양방향으로, 크게 다음의 2가지가 있습니다.

쉽게 말하는 데이터를 달라고 요청하는 것과, 그 데이터를 보내주는 응답 메시지입니다.

  • 요청 메시지(Request): 서버에 정보나 특정한 작업을 요청하는 것
  • 응답 메시지(Response): 요청에 대한 서버의 응답

 

 

2-2. HTTP 메시지의 구성요소

위에서 요청과 응답의 2가지 종류로 구분할 수 있다고 하였는데요.

이 2가지의 메시지들은 모두 다음의 3가지의 요소들로 구성되어 있습니다.

 

  • Start Line(시작 줄)
  • Headers(헤더 정보)
  • Body(본문)

 

이 3가지의 구성요소들은,

요청메시지(Request)인지,

응답메시지(Response)인지에 따라서,

그 구성이 조금 달라지는데요.

한번 보도록 하겠습니다.

 

  1. Start Line(시작 줄): 요청메시지와 응답메시지가 약간의 다름
    • 요청 메시지(Request): 요청 메시지에는 아래와 같은 요소들로 구성됩니다.
      • HTTP 메소드(GET, POST 등)
      • 요청할 리소스의 URL(웹 페이지나 파일의 주소[URL])
      • HTTP 버전: ex> HTTP/1.1
    • 응답메시지(Response)
      • HTTP 버전(위의 요청메시지와 같음)
      • 상태 코드: 숫자로 된 코드로, 서버에서 요청 처리 결과를 나타낸다(예> 200은 성공, 404는 찾을 수 없음을 의미)
      • 상태 메시지: OK, Not Found 등 상태 코드의 의미를 설명하는 간단한 텍스트 
  2. Headers(헤더)
    • 메시지에 대한 추가 정보로 '키: 값' 형태로 구성
    • 여러 헤더를 줄로 구분해서 포함시킬 수 있음
    • 요청메시지(request)와 응답메시지(Response)의 차이
      • 요청메시지: 콘텐츠의 유형, 데이터의 인코딩 방식, 캐시 정책, 브라우저 종류, 압축 형식 등을 지정할 수 있음
      • 응답메시지: 서버 유형, 콘텐츠의 유형, 캐시 정책 등의 메타데이터를 보내준다.
  3. Body(본문)
    • 실제로 전송되는 데이터
    • 텍스트나 Binary(2진수)데이터가 들어갈 수도 있습니다.
    • GET 요청메시지는 서버로부터 정보를 가져오는 것으로 헤더정보만 있으면 되서 본문데이터없이 전송

 

2-3. 요청 메시지(Request)의 예

먼저 요청메시지의 예를 보겠습니다.

 

아래 메시지는 GET요청으로 Body가 없구요.

Start Line은 첫번째 한줄로, HTTP 메소드(GET), 요청 대상(/user/profile), 그리고 HTTP 버전(HTTP/1.1)정보를 가지고 있습니다.

이어지는 줄들은 요청과 관련된 헤더들에 관한 정보입니다.(Host, User-Agent, Accept...)

각 헤더들의 끝에는 줄바꿈 문자가 들어있어, 구분을 할 수 있도록 도와줍니다.

 

GET /user/profile HTTP/1.1
Host: www.example.com:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html

 

 

 

2-4. 응답메시지(Response)의 예

응답 메시지도 보겠습니다.

 

첫 줄의 Start line에는 HTTP 버전 1.1을 사용하며, 상태 코드 200 OK로 요청이 성공적이었음을 나타냅니다.

 

Date, Server, Content-Type, Content-Length 등의 Headers 정보가 키밸류타입의 데이터로 들어가 있는데요.

이 후에는 HTML형태의 Body(본문)가 들어 있는 것을 볼 수 있습니다.

 

유의 해서 볼 점은, 헤더 정보와 본문사이에 한 줄이 비워져 있다는 것 입니다.

이것을 Blank Line이라고 부르는데요.

Blank Line이 헤더의 끝과 본문의 시작을 구분하도록 해 줍니다.

이는 HTTP 메시지를 명확하게 구조화하는 데 필수적인 부분입니다.

 

HTTP/1.1 200 OK
Date: Mon, 19 Dec 2023 22:38:34 GMT
Server: Apache/2.4.1 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 34823

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <div>Hello World!</div>
</body>
</html>

 

 

이상으로 HTTP메시지에 대해서 정리해 보았습니다.

728x90

댓글