오늘은 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)인지에 따라서,
그 구성이 조금 달라지는데요.
한번 보도록 하겠습니다.
- Start Line(시작 줄): 요청메시지와 응답메시지가 약간의 다름
- 요청 메시지(Request): 요청 메시지에는 아래와 같은 요소들로 구성됩니다.
- HTTP 메소드(GET, POST 등)
- 요청할 리소스의 URL(웹 페이지나 파일의 주소[URL])
- HTTP 버전: ex> HTTP/1.1
- 응답메시지(Response)
- HTTP 버전(위의 요청메시지와 같음)
- 상태 코드: 숫자로 된 코드로, 서버에서 요청 처리 결과를 나타낸다(예> 200은 성공, 404는 찾을 수 없음을 의미)
- 상태 메시지: OK, Not Found 등 상태 코드의 의미를 설명하는 간단한 텍스트
- 요청 메시지(Request): 요청 메시지에는 아래와 같은 요소들로 구성됩니다.
- Headers(헤더)
- 메시지에 대한 추가 정보로 '키: 값' 형태로 구성
- 여러 헤더를 줄로 구분해서 포함시킬 수 있음
- 요청메시지(request)와 응답메시지(Response)의 차이
- 요청메시지: 콘텐츠의 유형, 데이터의 인코딩 방식, 캐시 정책, 브라우저 종류, 압축 형식 등을 지정할 수 있음
- 응답메시지: 서버 유형, 콘텐츠의 유형, 캐시 정책 등의 메타데이터를 보내준다.
- 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메시지에 대해서 정리해 보았습니다.
'HTML, CSS, WEB 기술' 카테고리의 다른 글
CSS에서 VH, VW 와 %에 대한 이해 (1) | 2024.09.17 |
---|---|
FlexBox 로 구현하는 모던 CSS (3) | 2024.09.17 |
CSS Selector 와 함께 사용하는 Document API 정리 # textContent innerText querySelector (0) | 2022.11.03 |
HTTP Caching에 대해서 정리해 봅니다. #Cache (0) | 2020.05.13 |
HTTPS와 SSL, 그리고 공개키에 관한 총정리 #TLS #공개키 #대칭키 (1) | 2020.05.04 |
DNS(Domain Name System)에 대한 총정리 #IP주소 #DNS Server (0) | 2020.04.30 |
Google Font이용해서 CSS에서 Import하는 방법 #웹폰트 (0) | 2020.04.03 |
댓글