本文へスキップ
BecomeCoder

ネットワークコース · 第4章 Webの通信 · レッスン15

HTTP と curl ― Webサーバーと話す

ブラウザで完結

導入

いよいよ、第1章で見た「リクエストとレスポンス」を自分の手で再現します。Web の作法である HTTP を使って、コマンドから Web サーバーへリクエストを送り、返事を受け取るのが curlTCP/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

パスを変えると、ステータスコードの違いも体感できます。/admin403 Forbidden(禁止)、存在しない /missing404 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(レスポンス)

curlWeb API を叩くとき、サーバーの動作確認をするとき、ダウンロードするときなど、実務で毎日のように使う道具です。「ブラウザで開けないけど curl では返る?」を確かめると、問題がブラウザ側かサーバー側かを切り分けられます。

やってみよう

curl -I http://becomecoder200 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

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。