Slate Errors

Redirection (3xx)

304

Not Modified

— 変更なし

まずは確認: よくある原因 TOP3

  1. ブラウザの条件付きリクエストにヒット
    If-None-Match や If-Modified-Since で問い合わせて変化なし
  2. CDN キャッシュ層からの効率的な応答
    オリジンに問い合わせず手元のコピーで OK と判定
  3. 静的アセット (画像/JS/CSS) の再訪
    ETag がそのままなのでダウンロード不要

どこへ案内された?

304 は「君が前に持っていったコピー、まだ変わっていないよ。ダウンロードしなくて大丈夫」という応答です。 渡り廊下で先生が「君のノートは前と同じ内容だから、また書き写さなくていいよ」と声をかけてくれる——あの「持ち帰らずに済んだ」感触に似ています。

クライアントが ETagLast-Modified を覚えておいて、次に同じものを要求するとき「これは前と同じ?」と問い合わせます。サーバーが「同じだよ」と答えるのが 304。本文は返さないので、通信量と表示時間が大きく節約されます。

渡り廊下からのひとこと

学校の連絡黒板の前を毎朝通るとき、内容が昨日と同じなら、書き写すまでもなく素通りしてよい。先生も「昨日と変わらないよ」と一言かけるだけで済む。お互いの労力を抑えながら、必要な情報共有はちゃんと続いていく。

304 はこの「変化があるときだけ動く」工夫を Web 全体に広げたサインです。ページを高速化し、サーバー負荷を下げ、モバイル回線にもやさしい。Web のパフォーマンスを支える、地味だけど偉大な番号です。

たどり着くまで

新しい場所へ、こうたどり着く:

  1. 手元のキャッシュを使い続けるETag が一致するなら手元のコピーで OK
  2. Cache-Control を併用して期限を整える:必要に応じて再検証の頻度を調整
  3. ETag を生成・比較する仕組みを意識:サーバー側もハッシュベースで管理
  4. CDN で 304 が返る構成を作る (管理者向け):オリジン負荷を下げ、表示も速くなる

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 304 Not Modified
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>304 Not Modified</h1></body></html>

似ているケース

もっと知りたい