304 Not Modified

キャッシュされたコピーはまだ有効です。

使いどころ

If-None-Match や If-Modified-Since 付きの条件付きリクエストへの応答。

知っておきたいこと

304 は条件付きリクエストへの応答です。レスポンスに ETag または Last-Modified ヘッダーがあると、ブラウザーは後で If-None-Match または If-Modified-Since を送り、何も変わっていなければサーバーはボディなしの 304 を返して帯域幅を節約します。キャッシュが保存済みのコピーと有効期限を更新できるよう、304 では ETag、Cache-Control、Vary などのヘッダーを繰り返すべきです。

Apache の古い inode ベースの ETag のようにマシンごとに生成される ETag は、ロードバランサーの背後にあるサーバー間で異なるため、クライアントが 304 を受け取れることはまれです。圧縮によって ETag が変わったり、弱い ETag になったりすることもあります。DevTools では 304 の転送量は数百バイトですが、ステータス 200 で「from disk cache」と表示される場合はリクエストがまったく送られていません。fetch はブラウザーの再検証を隠し、キャッシュされたボディとともに 200 として報告します。

リダイレクト (3xx)

3xx はリダイレクトです。リクエストを完了するには、クライアントが別の場所へ移動するか、キャッシュしたコピーを使う必要があります。

レスポンスでの表示

HTTP/1.1 304 Not Modified

返し方

Node.js / Expressres.status(304).end()
Python / Flaskreturn '', 304
nginxreturn 304;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く