『HTTPクライアントとサーバーの基礎〜ncとcurlで裏側を覗いてみた〜』
この記事はこんな方におすすめです
- Webって結局なんなの?と考え出すと止まらなくなる方
- HTTPクライアント?サーバー?なにそれ?と思った方
- HTTPのやり取りの中身をそのまま確認してみたい方
参考書籍:小森裕介『プロになるためのWeb技術入門』
はじめに
こんにちは!35歳から未経験でエンジニアを目指して奮闘中の者です。
最近、Webの基礎を学ぶため技術書を読んでいたのですが、
「HTTPリクエストが〜」「レスポンスを返して〜」と横文字が連発。
正直、途中から「これ日本語だっけ…?」と軽く迷子になりました。
「これは文字だけ追ってても理解できないな」と思い、
HTTPのやり取りの中身を確認するため、自分のPCで再現してみることにしました。
すると、
「あ、こういうことか」
と、少しだけ腑に落ちる瞬間があったので、
今回はその内容を自分なりに整理してまとめてみます。
HTTPクライアントとサーバーとは?(一言でいうと)
専門用語を一旦忘れて、「レストランの注文」に例えてみます。
- HTTPクライアント = 腹ペコのお客さん(「ハンバーグ定食ください!」)
- HTTPサーバー = 厨房の料理人(「はいよ!」と料理を出す)
- HTTP = 注文のルール(言葉や伝え方の決まり)
つまり、
「ください」と言って「どうぞ」と返すだけ
これがWebの基本構造です。
実際にやってみた(理解が深まったポイント)
HTTPのやり取りの中身を確認するため、ncとcurlで通信を再現してみました。
ターミナルを2つ開いて、1人でお客さん(curl)と料理人(nc)をやる感じです。
図で理解するHTTPのやり取り
具体的な方法は「nc curl HTTP 再現」などで調べると、実際に試せる手順が出てきます。
やってみて一番理解が進んだのは
- リクエストは「ただの文章」
- レスポンスも「ただの文章」
- でも、その書き方(ルール)はちゃんと決まっている
👉「ルールに従ったテキストの会話」
これがHTTPの正体だと体感できました。
35歳がハマったポイント
「空行」を忘れてフリーズ事件
本をちゃんと読まずにコマンドを打った結果、
・curlが無反応(完全フリーズ)
「え、壊れた?」と一瞬本気で焦りました。
原因は単純で、
・空行を書いていなかった
HTTPでは、
- ヘッダー
- (空行)
- ボディ
というルールがあるので、ここを守らないと通信が成立しません。
さっきのコードはこうなっていました
💡 今回のミス
HTTP/1.1 200 OK
Content-Type: text/html
<h1>Hello</h1>
👉 空行(改行)がなくcurlは「まだヘッダー続くの?」と待ち続ける
✅ 正しい書き方
echo -e "HTTP/1.1 200 OK
Content-Type: text/html
<h1>Hello</h1>" | nc -l 8080
👉 改行を1行追加(=空行)するだけ
これで正常にレスポンスが返りました(涙)
まとめ
- Webの正体は「クライアントとサーバーの会話」
- HTTPはそのための「ルール」
- 中身はただのテキスト
- でもルールはしっかり決まっている
最初は「なんか難しそう…」と思っていたHTTPも、
実際に手を動かしてみると、かなりシンプルな仕組みでした。
「よくわからない」から「なんとなくわかる」になっただけでも大きな進歩です。
30代からの学習、なかなか大変ですが、
こういう小さな理解の積み重ねが一番効く気がしています。
同じように学習中の方ncとcurlでHTTPの正体を体感してみて下さい!