参考: https://developer.mozilla.org/ja/docs/Web/HTTP/Reference/Status/304
「あなたの持っているコピーはまだ有効。だから本文は送らない」を意味するレスポンス。
- 条件付き GET / HEAD(
If-None-Match/If-Modified-Since付き)に対してのみ返る - 本文を持たない。代わりに 200 で返すはずだったメタデータ(
ETag/Cache-Control/Expires/Vary/Date)を載せる - 3xx だがリダイレクトではない。「行き先を変えろ」ではなく「手元のを使え」
本文がないと何が得か
- 転送量 — 1MB の CSS/画像が数百バイトで済む。CDN のオリジン転送費に直結
- サーバー処理 — 本文を生成・読み出さず、バリデーターの比較だけで終わる
- クライアント処理 — 再パース・再デコードが不要
- ただし遅延は減らない — RTT 1 回はかかる。真のキャッシュヒット(リクエストすら出さない)には勝てない
「送らない」のではなく「送れない」
RFC 9112 §6.3 で 304 は HEAD 応答や 204 と同じく「ヘッダー後の最初の空行で必ず終端する」と規定されている。
Content-Length に何を書いても本文とみなされない。書いてしまうと keep-alive(TCP 接続の使い回し)で繋がっている相手はそれを次のレスポンスの先頭として読み始め、以降が壊れる。