🔩 ねじき教室 Go と Web の教室

HTTP を生で読む

読了目安 約4分

curl でリクエストとレスポンスの生のテキストを観察し、メソッド、ステータスコード、ヘッダーの読み方を身につける。

この章の目次

本編(/web/01-what-happens/)で説明した HTTP の中身は、ただのテキストです。 実物のリクエストとレスポンスを 1 行ずつ読んでいきます。

curl で会話を観察する

curl は、コマンドラインから HTTP リクエストを送るためのツールです。 WSL の Ubuntu には最初から入っていることが多く、ターミナルで次のように打つと使えます(なければ sudo apt install curl)。

シェル
curl -v --http1.1 https://example.com/
  • -v:通信の中身(送ったリクエストと受け取ったレスポンス)を表示します。
  • --http1.1:HTTP のバージョンを 1.1 に固定し、やり取りをそのままテキストとして読めるようにします。

現在は HTTP/2 や HTTP/3 も使われますが、運び方が違うだけで、メソッドやヘッダーといった会話の中身は共通です。

出力のうち、> で始まる行が送ったリクエスト、< で始まる行が受け取ったレスポンスです。 暗号化(TLS)に関する行と一部のヘッダーを省くと、次のようになります(値は環境や時期で変わります)。

テキスト
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/8.7.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Last-Modified: Wed, 15 Jul 2026 18:48:48 GMT
<
<!doctype html>
<html>
(HTML が続く)

会話全体の形はリクエストもレスポンスも同じで、「1 行目、ヘッダーの並び、空行、ボディ」という 4 層構造です。

リクエストの構造

リクエストの 1 行目をリクエスト行と呼び、スペース区切りで 3 つの要素が並びます。

  • メソッドGET。何をしたいかの種別です。
  • パス/。前章で分解した URL のパス部分です。
  • バージョンHTTP/1.1

2 行目からはヘッダー、つまり「名前: 値」の形式で付ける付加情報が続きます。 Host: example.com はどのホスト名宛てのリクエストかを伝えるヘッダーで、User-Agent は「どんなソフトウェアが送ったか」の自己申告です。

ヘッダーの終わりは空行で示します。 空行の後にはボディ(本体のデータ)を置けますが、この例のような GET のリクエストにはボディがないのが普通です。

メソッド

メソッドの中心は 2 つです。

  • GET:データの取得。ページを見る、検索するなど、サーバー側の状態を変えない操作に使います。
  • POST:データの送信。投稿する、登録するなど、サーバー側の状態を変える操作に使います。

ほかに、更新を表す PUT や削除を表す DELETE などもあります。 ブラウザでリンクをクリックすると GET が、フォームの送信ボタンを押すと多くの場合 POST が送られています。

ステータスコード

HTTP/1.1 200 OK の数字の部分をステータスコードと呼びます。 リクエストがどう処理されたかを表す 3 桁の数字で、先頭の桁で大きく分類されます。

  • 1xx:処理の途中。目にする機会は少ないです。
  • 2xx:成功。
  • 3xx:別の場所を見よ(リダイレクト)。
  • 4xx:クライアント側の誤り。
  • 5xx:サーバー側の誤り。

代表を 4 つ覚えてください。

  • 200 OK:成功。
  • 302 Found:別の URL へ移動せよ。移動先は後述の Location ヘッダーに書かれます。
  • 404 Not Found:そのパスに対応するものがない。
  • 500 Internal Server Error:サーバー内部でエラーが起きた。

Part 3 で自分のサーバーを書くようになると、コードのバグは 500 という形で現れます。

よく見るヘッダー

レスポンス側のヘッダーで、まず知っておくのは次の 3 つです。

  • Content-Type:ボディの形式。HTML なら text/html、JSON なら application/json です。
  • Location:3xx のレスポンスとセットで使われ、移動先の URL を示します。ブラウザはこれを見て自動でその URL に移動します。
  • Set-Cookie:サーバーがブラウザに小さなデータを覚えさせるためのヘッダーです。ログイン状態の維持に使われますが、詳細はミニ掲示板でログインを作るとき(/app/04-session/)に扱います。

試してみよう

  1. curl -v --http1.1 https://example.com/ を実行して、この章で読んだ各行を自分の目で確かめてください。省略した TLS 関連の行やヘッダーも表示されますが、>< の行だけ追えば十分です。
  2. パスをでたらめに変えて(https://example.com/xyz など)、ステータスコードがどう変わるかを見てください。
  3. 普段見ているサイトの URL を http://(s なし)に変えて送ってみてください。多くのサイトは 301 や 302 を返し、Location ヘッダーで https:// の URL へ誘導してきます。

ボディに入る 2 大形式は、本編の「HTML と JSON」(/web/02-html-json/)で扱っています。