コース目次 / 第1章
HTTPを、覗いて、手で話す
自分のPCにHTTPサーバーを立て、curl -vでリクエスト/レスポンスの生の形を見ます。ncで同じリクエストを手打ちし、HTTPが特別な仕組みではなく、ただのテキストのやり取りだと確認します。
観察対象を、立てる
mkdir site && echo "hello from server" > site/index.html
cd site && python3 -m http.server 8080 --bind 127.0.0.1
127.0.0.1:8080に、ごく単純なHTTPサーバーが立ちました。
curl -vで、生のやり取りを見る
別のターミナルから。
curl -v http://127.0.0.1:8080/
* Trying 127.0.0.1:8080...
* Connected to 127.0.0.1 (127.0.0.1) port 8080
> GET / HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/3.11.15
< Content-type: text/html
< Content-Length: 18
<
hello from server
>で始まる行が送ったリクエスト、<で始まる行が受け取ったレスポンスです。-v(verbose)は、curlが裏でやり取りしている生のHTTPメッセージをそのまま見せてくれます。
ncで、同じものを手で打つ
curlがやっていることは、実はただのテキストを送っているだけです。nc(netcat)で、同じリクエストを手で組み立てて送ってみます。
printf 'GET / HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: close\r\n\r\n' | nc 127.0.0.1 8080
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.11.15
Content-type: text/html
Content-Length: 18
hello from server
curlを使わなくても、まったく同じ応答が返ってきました。HTTPは、決まったルールに従って書かれたテキストの手紙です。GET / HTTP/1.1で始まり、ヘッダーの後に空行(\r\n\r\n)を挟む——このルールさえ守れば、どんなツールからでも会話できます。sec-httpで扱った内容が、ここでも同じ形で現れています。
サーバーは、次の章でも使うので止めずに残しておいてください。
こうなっていればOK
卒業まであと2章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。