nc 명령어로 http request, receive 구조 이해하기
vagrant@vagrant:~$ printf "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n" | nc www.example.com 80
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 220799
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 10 Mar 2024 14:28:30 GMT
Etag: "3147526947"
Expires: Sun, 17 Mar 2024 14:28:30 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (laa/7BD6)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative ...
</div>
</body>
</html>
HTTP(HTTP: HyperText Transfer Protocol)는 클라이언트와 서버 간에 데이터를 주고받는 프로토콜입니다. HTTP 요청(request)은 클라이언트에서 서버로 보내는 메시지이며, 일반적으로 웹 브라우저가 서버에 웹 페이지나 파일을 요청할 때 사용됩니다. HTTP 요청은 다음과 같은 구조를 가집니다:
요청 라인(Request Line): 요청 메서드, 요청하는 리소스의 경로, 그리고 사용하는 프로토콜 버전으로 구성됩니다. 주요 요소는 다음과 같습니다:
헤더(Headers): 헤더는 요청에 대한 부가적인 정보를 포함합니다. 여기에는 다양한 종류의 정보가 포함될 수 있습니다. 몇 가지 주요 헤더는 다음과 같습니다:
본문(Body): 요청 메시지의 본문에는 클라이언트가 서버에게 전송하는 데이터가 포함됩니다. 이 부분은 필수가 아닌 경우가 많으며, 주로 POST 요청 등에서 사용됩니다.
예를 들어, 다음은 간단한 HTTP GET 요청의 예시입니다:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
이 요청은 www.example.com
서버로부터 index.html
파일을 요청하는 GET 요청입니다.
HTTP 응답은 서버가 클라이언트에게 보내는 메시지입니다. HTTP 응답은 클라이언트의 요청에 대한 결과를 포함하고 있습니다. 일반적으로 웹 서버가 클라이언트의 요청에 따라 HTML 페이지, 이미지, 스크립트 파일 등의 데이터를 제공할 때 사용됩니다. HTTP 응답은 다음과 같은 구조를 가집니다:
상태 라인(Status Line): 응답의 상태 코드와 상태 메시지로 구성됩니다. 주요 요소는 다음과 같습니다:
헤더(Headers): 응답에 대한 부가적인 정보를 포함합니다. 요청 헤더와 마찬가지로 다양한 종류의 정보가 포함될 수 있습니다. 일부 일반적인 헤더는 다음과 같습니다:
본문(Body): 응답 메시지의 본문에는 서버가 클라이언트에게 전송하는 데이터가 포함됩니다. 이 부분은 필수가 아닌 경우가 있으며, 주로 HTML 페이지, 이미지, JSON 데이터 등이 여기에 포함됩니다.
예를 들어, 다음은 간단한 HTTP 응답의 예시입니다:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 122
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
이 응답은 상태 코드가 200(OK)이며, text/html
형식의 HTML 페이지를 포함하고 있습니다. 페이지의 내용은 간단한 "Hello, World!" 제목을 가진 HTML 문서입니다.