[Network] From Ping to HTTP 1. Experiment with nc and HTTP

llunaB·2024년 3월 10일
0

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>

설명 : request

HTTP(HTTP: HyperText Transfer Protocol)는 클라이언트와 서버 간에 데이터를 주고받는 프로토콜입니다. HTTP 요청(request)은 클라이언트에서 서버로 보내는 메시지이며, 일반적으로 웹 브라우저가 서버에 웹 페이지나 파일을 요청할 때 사용됩니다. HTTP 요청은 다음과 같은 구조를 가집니다:

  1. 요청 라인(Request Line): 요청 메서드, 요청하는 리소스의 경로, 그리고 사용하는 프로토콜 버전으로 구성됩니다. 주요 요소는 다음과 같습니다:

    • 메서드(Method): 요청의 목적을 나타내는 것으로, 주로 GET, POST, PUT, DELETE 등이 사용됩니다.
    • 리소스 경로(Resource Path): 요청하는 리소스의 위치를 가리킵니다. 보통 URL 형태로 표현됩니다.
    • 프로토콜 버전(Protocol Version): 요청하는 HTTP 프로토콜의 버전을 나타냅니다. 예를 들어, HTTP/1.1이나 HTTP/2 등이 있습니다.
  2. 헤더(Headers): 헤더는 요청에 대한 부가적인 정보를 포함합니다. 여기에는 다양한 종류의 정보가 포함될 수 있습니다. 몇 가지 주요 헤더는 다음과 같습니다:

    • Host: 요청을 받을 호스트(웹 서버)의 도메인 이름 또는 IP 주소를 나타냅니다.
    • User-Agent: 요청을 보내는 클라이언트(웹 브라우저)의 소프트웨어 식별자를 나타냅니다.
    • Content-Type: 요청 본문의 데이터 타입을 나타냅니다.
    • Accept: 클라이언트가 원하는 응답의 미디어 타입을 나타냅니다.
    • 기타 등등
  3. 본문(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 요청입니다.


설명 : response

HTTP 응답은 서버가 클라이언트에게 보내는 메시지입니다. HTTP 응답은 클라이언트의 요청에 대한 결과를 포함하고 있습니다. 일반적으로 웹 서버가 클라이언트의 요청에 따라 HTML 페이지, 이미지, 스크립트 파일 등의 데이터를 제공할 때 사용됩니다. HTTP 응답은 다음과 같은 구조를 가집니다:

  1. 상태 라인(Status Line): 응답의 상태 코드와 상태 메시지로 구성됩니다. 주요 요소는 다음과 같습니다:

    • 상태 코드(Status Code): 요청의 성공 여부나 실패 원인 등을 나타내는 세 자리 숫자입니다. 일반적으로 200(OK), 404(Not Found), 500(Internal Server Error) 등이 사용됩니다.
    • 상태 메시지(Status Message): 상태 코드에 대한 설명으로, 인간이 읽을 수 있는 형태의 텍스트입니다.
  2. 헤더(Headers): 응답에 대한 부가적인 정보를 포함합니다. 요청 헤더와 마찬가지로 다양한 종류의 정보가 포함될 수 있습니다. 일부 일반적인 헤더는 다음과 같습니다:

    • Content-Type: 응답 본문의 데이터 타입을 나타냅니다.
    • Content-Length: 응답 본문의 길이를 나타냅니다.
    • Server: 서버의 소프트웨어 식별자를 나타냅니다.
    • Date: 응답이 생성된 날짜와 시간을 나타냅니다.
    • 기타 등등
  3. 본문(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 문서입니다.

profile
안녕하세요. 성장하는 주니어 개발자입니다. :-)

0개의 댓글