はじめに:Webの世界の「ごちそうさまでした!」
普段、何気なくスマートフォンでWebサイトを見たり、SNSに写真を投稿したりしているとき、裏側では膨大なデータがネットワークを駆け巡っています。
ブラウザでボタンを「ポチッ」と押した瞬間、あなたのデバイスからWebサーバーに向けて「このページを見せて!」「このデータを登録して!」というお願い(リクエスト)が送信され、サーバーから「いいですよ!」「はい、これどうぞ!」というお返事(レスポンス)が返ってきます。
このとき、サーバーが一番最初に伝えてくる合図が、今回主役となる HTTPステータスコード です。
特に、数字が「2」から始まる 2xx(成功系) は、現実世界で言えば「注文がバッチリ通ったよ!」「荷物を確かに受け取ったよ!」というハッピーなお知らせです。
しかし、ひとくちに「成功」と言っても、200 OK、201 Created、204 No Content など、実はいろいろな種類があります。そして、この「どの成功コードを返したか」によって、ブラウザが「このデータを手元に保存(キャッシュ)していいのかな?」と考える挙動や、次の通信のアクションが大きく変わってくるのです。
今回は、パケットの海を日々泳ぎ回るインフラエンジニアの視点から、身近な例えを交えて「2xx系の違い」と「ブラウザキャッシュの仕組み」を一歩ずつ丁寧に紐解いていきましょう!
—
1. 現実世界で例えるHTTP通信のやりとり
まずはイメージを掴むために、HTTPの通信を「郵便配達」や「カフェでの注文」に例えてみましょう。
あなたがカフェのカウンターで「アイスコーヒーを1つください」と注文カード(リクエスト)を店員さんに渡したとします。
- 店員さんが笑顔で「はいどうぞ!」とコーヒーを渡してくれる
👉 これが 200 OK です。頼んだもの(コンテンツ)がちゃんと手元に届きました。
- 会員登録用紙を書いて渡したら、店員さんが「新しい会員証を発行しました!」とカードを渡してくれる
👉 これが 201 Created です。新しい何かがお店側に作られました。
- アンケート用紙を回収箱に入れたら、店員さんが「受け取りました!」とペコリとお辞儀だけしてくれる(手には何も返されない)
👉 これが 204 No Content です。処理は完璧に成功したけれど、持ち帰る品物はありません。
このように、全部「成功(注文や手続きが正常に完了した)」ですが、「手元に何かが届くのか」「新しく作られたのか」というニュアンスが違いますよね。
—
2. 代表的な「2xx 成功系」ステータスコードを深掘り!
それでは、Web開発やネットワークの世界で特によく出会う3つのコードを詳しく見ていきましょう。
① 200 OK(大定番!すべて順調)
Webの世界で一番見かける、言わば「優等生」のコードです。
ブラウザが「Webページを見せて(GETリクエスト)」と頼んだとき、サーバーが「了解!これがそのHTMLや画像だよ」と一緒に 200 OK を返します。
- 特徴: レスポンスの中に、必ず「本体(ボディデータ)」が含まれます。
- 後続への影響: ブラウザは受け取ったデータを画面に描画(レンダリング)します。
② 201 Created(新しく生まれました!)
ブログの記事を新しく投稿したときや、ユーザー登録をしたとき(POSTリクエストなど)によく使われます。
- 特徴: サーバー側で「新しいデータ(リソース)が無事に作成された」ことを意味します。
- 後続への影響: 多くの場合、レスポンスのヘッダーに
Location: /articles/123のように「新しく作ったデータのURLはここですよ」という道案内が付いてきます。ブラウザやJavaScriptは、そのURLを元に「作成完了画面」へ移動したりします。
③ 204 No Content(仕事は完了、お返しの荷物はゼロ)
「設定を保存した」「お気に入りボタンを押した」というとき、画面全体を新しく読み直す必要はありませんよね。サーバー側で処理さえ完了していれば十分です。
- 特徴: 処理は大成功ですが、サーバーはあえて中身(ボディ)を一切返しません。
- 後続への影響: ブラウザは「画面の表示をそのまま維持」します。無駄なデータ通信が発生しないため、ネットワーク帯域にとても優しいスマートなコードです。
—
3. ステータスコードと「キャッシュ(記憶)」の密接な関係
ここからが、インフラ・Webセキュリティの観点でも非常に面白いポイントです。
ブラウザには、一度読み込んだ画像やWebページを自分のパソコンの中に一時保存しておき、次回同じページを開くときに超高速で表示する「キャッシュ(Cache)」という機能が備わっています。
毎回サーバーまで荷物を取りに行かずに、手元の引き出し(キャッシュ)から取り出せば、通信の待ち時間もゼロになりますし、オフィスのネットワーク回線も圧迫しませんよね。
しかし、「どのステータスコードならキャッシュしていいのか?」には厳格なルールがあります。
| ステータスコード | デフォルトでのキャッシュ挙動 | なぜその挙動になるの? |
| :— | :— | :— |
| 200 OK | キャッシュされやすい | 「見たい」と言われたデータその
コメント