わかりやすく HTTP とは
アドレスバーにアドレスを入れてEnterキーを押すと、少しして画面にページが出てきます。そのあいだ、見えないところでは短い会話が行き来しています。ブラウザーが「このページをください」と頼むと、サーバーが「どうぞ」と渡します。この頼みと受け渡しの約束が、ウェブを動かすHTTPです。
ください、どうぞ
前のレッスンで、TCPのおかげでデータが欠けずに順番どおり届くことを見ました。では、そうして運んだデータで、ブラウザーとサーバーはどんな話をしているのでしょうか。
ウェブでの会話はとても単純です。ブラウザーがサーバーに「このページをください」と頼むと、サーバーは「どうぞ」とページを渡します。頼みをリクエスト、受け渡しをレスポンスと呼びます。HTTPは、このリクエストとレスポンスをどんな形でやり取りするかを決めた約束です。
ブラウザーを押して、サーバーにリクエストを送りましょう。サーバーがレスポンスを返すと、一組ができあがります。
リクエスト一つにレスポンス一つ。ウェブはこの単純な組で動いています。先に話しかけるのはいつもブラウザーで、サーバーは受け取ったリクエストに答えるだけです。サーバーのほうから話しかけてくることはありません。
だからサーバーは、数えきれないブラウザーからのリクエストを順に受け取り、一つずつ答えればよいのです。ところが、頼みは「ください」だけではありません。リクエストごとに何をしたいかを示す動作が付いています。次にその動作を見てみましょう。
リクエストに付く動作
どのリクエストにも、何をしたいかを知らせる動作が付いています。いちばんよく使うのはGETで、「これをください」と受け取る動作です。ページを開くたびにブラウザーが送るリクエストがGETです。
反対側にはPOSTがあります。「これを受け取ってください」とサーバーへ送る動作です。書き込みを投稿したり、ログインのときにIDとパスワードを送ったりするときがそうです。受け取るならGET、送るならPOSTです。
動作を押して選びましょう。GETは受け取る側、POSTは送る側です。動作ごとにデータがどちらへ流れるかを矢印で示します。
GETとPOSTの二つを知るだけで、ウェブでする仕事のほとんどが説明できます。ページを開いて読むときはGET、何かを書いて送るときはPOSTのリクエストを使います。
レスポンスにも短いしるしが付いてきます。ステータスコードと呼ばれる三けたの数字で、うまく処理できれば200、そんなページがなければ404が付きます。成功したか失敗したかを、数字一つで知らせてくれるわけです。いまはこの二つを覚えておけば十分です。
毎回はじめてのお客のように
HTTPには、ちょっと変わった性格があります。リクエストを一つ処理すると、いまだれが何を頼んだかをきれいに忘れてしまうのです。同じ人が二回来ても、毎回はじめてのお客のように扱います。
「さっきいらした方ですよね」という記憶がありません。このように前のリクエストを覚えていない性質を「状態がない」といい、英語ではstatelessと呼びます。
同じ人として、二回リクエストを送ってみましょう。二回目もサーバーは初めて会ったようにあいさつします。HTTPは前のリクエストを覚えていません。
二回目の訪問でも初対面のあいさつをされるのは、少しもどかしく見えます。けれども、これはわざとそう作られているのです。サーバーはお客を一人ひとり覚えなくてよいので仕事が軽く、そのぶん、たくさんのリクエストを同時にさばけます。
そのかわり、「さっきの人」だと見分けてもらうには、リクエストのたびに目印を持たせて送る必要があります。その目印が、少しあとのセッションとクッキーのレッスンで出会うクッキーです。
かけらを集めて一枚のページに
ウェブページ一枚は、一回のリクエストでぜんぶ届くわけではありません。ブラウザーはまず、文章と骨組みが入った文書をGETで受け取ります。文書を読むと、画像のファイルや見た目を決めるファイルも必要だと書いてあります。
そこでブラウザーは、画像をください、見た目のファイルをください、とまたリクエストを送ります。こうしてリクエストとレスポンスを何回もやり取りし、かけらを一つずつ集めて、やっと一枚のページができあがります。
かけらを一つずつ押してリクエストしましょう。文章、画像、見た目がレスポンスとして届き、ページが順に埋まっていきます。
かけらがそろうと、空いていた場所が埋まりました。私たちの目には一度に出てきたように見えても、実際は何回ものリクエストとレスポンスが集まった結果です。骨組み一つ、画像一つ、見た目のファイル一つを、それぞれ別々に頼んで受け取ったのです。
大きなページなら、こうしたリクエストが数十回、多いときは百回を超えることもあります。それでもインターネットが速いので、まばたきするあいだに終わり、私たちはただページが出たと感じます。
まとめ
一言でまとめるとこうです。ウェブはリクエストとレスポンスの一組で動き、リクエストにはGET(受け取る)やPOST(送る)のような動作が付きます。レスポンスには、成功か失敗かを知らせる数字が付いてきます。
一枚のページは、何回ものリクエストとレスポンスでかけらを集めて作られます。そしてHTTPは前のリクエストを覚えていないので、どのリクエストもはじめてのお客のように扱います。この単純さのおかげで、サーバーはたくさんのリクエストを軽くさばけます。これがHTTPという約束です。
要点を順に押して振り返りましょう。(リクエストとレスポンス → GET・POSTの動作 → ひどい忘れんぼう → かけらを集めてページに)
これで、ウェブページがどう行き来するのかがわかりました。ブラウザーがリクエストし、サーバーがレスポンスする。これがウェブの基本です。
けれども、HTTPで会話するのは、人が使うブラウザーだけではありません。天気アプリがサーバーから今日の天気を受け取るときのように、プログラムどうしもHTTPでデータをやり取りしています。次のレッスンでは、プログラムがほかのプログラムに仕事を頼む窓口、APIを取り上げます。買い物かごやログインの状態を覚えておく方法は、その次のセッションとクッキーのレッスンで扱います。