HTML, CSS, WEB 기술,

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

Developer88 2023. 12. 19. 13:52
반응형

오늘은 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