導入
いよいよ、第1章で見た「リクエストとレスポンス」を自分の手で再現します。Web の作法である HTTP を使って、コマンドから Web サーバーへリクエストを送り、返事を受け取るのが curl(TCP/IP のアプリケーション層を触る道具)。ブラウザが裏でやっていることを、丸裸にできます。
説明
まず、レスポンスのヘッダ(メタ情報)だけを見てみましょう。-I(大文字のアイ)を付けると、本文は受け取らずヘッダだけを表示します。
curl -I http://becomecoder
1行目 HTTP/1.1 200 OK が、サーバーからの返事の**要(ステータス行)**です。200 は「成功したよ」という ステータスコード。この番号は Web のいたるところで使われます。
flowchart LR
A["2xx 成功<br/>200 OK"]
B["3xx リダイレクト<br/>301 移動しました"]
C["4xx こちら側の間違い<br/>403 禁止 / 404 無い"]
D["5xx サーバー側の障害<br/>500 内部エラー"]
-I を外すと、今度は**本文(HTML)**が返ります。これがブラウザで表示されるページの元データです。
curl http://becomecoder
パスを変えると、ステータスコードの違いも体感できます。/admin は 403 Forbidden(禁止)、存在しない /missing は 404 Not Found(無い)が返ります。
curl -I http://becomecoder/admin
curl -I http://becomecoder/missing
第1章の「リクエスト → レスポンス」を、curl は1コマンドで再現しています。裏では、レッスン27の DNS で名前を IP に変換し → その IP のポート80へ TCP で接続し → HTTP の作法で「このページください」と送り → サーバーが返す、という流れが起きています。ここまで学んだ層が、すべてつながりました。
sequenceDiagram
participant C as curl(クライアント)
participant S as Webサーバー
C->>S: GET / HTTP/1.1(リクエスト)
S-->>C: HTTP/1.1 200 OK + HTML(レスポンス)
curlは Web API を叩くとき、サーバーの動作確認をするとき、ダウンロードするときなど、実務で毎日のように使う道具です。「ブラウザで開けないけどcurlでは返る?」を確かめると、問題がブラウザ側かサーバー側かを切り分けられます。
やってみよう
curl -I http://becomecoder で 200 OK とヘッダを確認し、-I を外した curl http://becomecoder で HTML 本文が返ることを見ましょう。curl -I http://becomecoder/admin(403)と curl -I http://becomecoder/missing(404)で、ステータスコードが変わることも体感してください。
演習
http://becomecoder に HTTP リクエストを送り、ヘッダ(ステータス行を含む応答情報)だけを表示してください。
ヒント1を見る
ヘッダだけを見るオプションは -I(大文字のアイ)です。
ヒント2を見る
curl -I http://becomecoder