ページを開くと何が起きる?
ブラウザーにアドレスを打つと、数秒でページが出ます。その裏では、ブラウザーとサーバーが短い手紙をやり取りしています。
この手紙の決まりが HTTP です。読み方が分かれば、「ページが出ない」ときに理由を自分で探せます。
このレッスンのゴール
メモ
リクエストからレスポンスまで、ページが届く流れを追える。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ブラウザー | ページを頼んで、画面に表示するアプリ | |
| サーバー | ページやデータを持っていて、頼まれたら返す機器 | |
| HTTP | ブラウザーとサーバーが手紙をやり取りするときの決まり | |
| リクエスト | ブラウザーからサーバーへの「これをください」という頼み | GET / HTTP/1.1 |
| レスポンス | サーバーからブラウザーへの返事 | |
| ステータスコード | 返事の結果を表す三けたの番号 | 404 |
| URL | ページの場所を表すアドレス | http://web/files/ |
学生が入力するセルは、このプレビューでは空白です。
頼みと返事の一往復
Webの基本は、一往復です。ブラウザーが リクエスト を送り、サーバーが レスポンス を返します。
手紙と同じで、どちらにも先頭の一行、ヘッダー、本文があります。先頭の一行を読めば、何を頼み、どうなったかが分かります。
例:リクエストとレスポンスの中身
| 部分 | リクエスト(頼み) | レスポンス(返事) |
|---|---|---|
| 先頭の一行 | GET / HTTP/1.1 | HTTP/1.1 200 OK |
| ヘッダー | Host: web | Server: nginx |
| 本文 | ふつうは無い | ページのHTML |
学生が入力するセルは、このプレビューでは空白です。
返事のヘッダーだけを見る
curl -I http://webここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
返事の一行目を読もう
一行目は HTTP/1.1 200 OK です。HTTP のバージョン、番号、短い言葉の順に並びます。
その下に Server: や Content-Type: が続きます。Content-Type: text/html は「これはHTMLのページです」という意味です。
番号の最初の数字で結果が分かる
ステータスコードは三けたで、最初の数字が結果の種類を表します。2は成功、3は別の場所へ移動、4はこちらの頼み方の問題、5はサーバーの問題です。
有名な番号は、少しだけ覚えれば十分です。
例:よく見る番号
| 番号 | 意味 | 例 |
|---|---|---|
| 200 | 成功。ページを返した | 普通にページが出る |
| 301 | 別のアドレスへ移った | 古いアドレスから新しい方へ |
| 403 | 見せてはいけない | ログインが要るページ |
| 404 | そのページは無い | アドレスの打ち間違い |
| 500 | サーバーの中で失敗した | プログラムの不具合 |
学生が入力するセルは、このプレビューでは空白です。
存在するページの番号
curl -s -o /dev/null -w '%{http_code}\n' http://web/ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
存在しないページの番号
curl -s -o /dev/null -w '%{http_code}\n' http://web/nothingここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
URLは三つの部分でできている
URL は、ページの場所を表す文字列です。最初の部分は、どの決まりで話すかを表します。次はサーバーの名前、最後はサーバーの中の場所です。
サーバーの名前は、本物のサイトでは example.jp のような形です。ラボの中では短く web と呼びます。
例:URLを分ける
| URL | 決まり | サーバー | 場所 |
|---|---|---|---|
| http://web/files/prices.csv | http | web | /files/prices.csv |
| https://example.jp/shop/ | https | example.jp | /shop/ |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
404 が出ると、サイトが壊れたと思いがちです。実はサーバーはちゃんと答えています。「そんなページは無い」と答えただけです。
さらに挑戦:番号を増やす
status_kind に、404 だけ「見つからない」と答える行を足してみましょう。
そのあと status_code("HTTP/1.1 404 Not Found") と status_kind(404) を続けて呼びます。見つからないページの返事を、自分の関数で読めます。