キャッシュされたコピーはまだ有効です。
使いどころ
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 / Express | res.status(304).end() |
|---|---|
| Python / Flask | return '', 304 |
| nginx | return 304; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/