コース目次 / 第1章

リクエストの解剖 — メソッド・パス・ヘッダ

curl -v で、リクエストが「メソッド + パス + ヘッダ + 空行 + ボディ」という平文の構造であることを、自分の目で確かめます。

第1章 / 全4章目安 約12分この章のゴール: HTTP リクエストの生の構造を読め、メソッドとヘッダを手で指定できるようになる

HTTP リクエストは、特別な暗号ではありません。ただのテキストです。中身はこうなっています。

GET /hello?name=alice HTTP/1.1   ← リクエスト行(メソッド パス プロトコル)
Host: 127.0.0.1:4610             ← ヘッダ(何行でも)
User-Agent: curl/8.7.1
Accept: */*
                                 ← 空行(ここでヘッダの終わり)
(ボディ。GET では普通は空)

診断では、この一行ずつを自分で書き換えます。まずは目で見てみましょう。

生のリクエストを見る

curl -v(verbose)を付けると、curl が実際に送った行(>)と受け取った行(<)が見えます。

curl -s -v "http://127.0.0.1:4610/hello?name=alice"
> GET /hello?name=alice HTTP/1.1
> Host: 127.0.0.1:4610
> User-Agent: curl/8.7.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8

> で始まる4行が、あなたが送ったリクエストです。1行目がリクエスト行、続く3行がヘッダ、そして空行。これがブラウザも裏で送っているものの正体です。

メソッドを変える

-X でメソッドを指定できます。同じパスに DELETE を送ってみます。

curl -s -X DELETE "http://127.0.0.1:4610/hello?name=alice"

返ってきた JSON の "method" が "DELETE" に変わります。メソッド(GET/POST/PUT/DELETE …)は、サーバに「何をしたいか」を伝える動詞です。診断では「GET しか想定していない所に POST を送ったら?」のように、想定を外した組み合わせを試します。

ヘッダを足す

-H でヘッダを好きなだけ足せます。

curl -s -H "X-Demo: 1" "http://127.0.0.1:4610/hello"

返ってきた headers に "x-demo": "1" が増えています。ここで大事な感覚を一つ。

ヘッダは、送る側が自由に書ける自己申告です。User-Agent も X-Forwarded-For も、値はいくらでも詐称できます。「このヘッダに管理者と書いてあるから管理者」のように、サーバが自己申告を無条件に信じていると、そこが穴になります。この「ヘッダは信じられない」感覚は、あとの認可の章でそのまま効いてきます。

次章は、ヘッダの中でも特に重要な Cookie と、ボディを持つ POST です。

こうなっていればOK

卒業まであと2章です。

この章はまだ完了していません。