REST API、Firefoxに問題はありませんが、Chromeブラウザーを動作させることができません、 200 OK
(または同様の)ヘッダーがサーバーに送信されないため、常にif-none-match
をスローします。
Firefoxを使用すると、304
を完全に取得できます。
何かが恋しいと思います。Cache-Control: max-age=10
でテストしてみましたが、何もしませんでした。
ChromeがIf-None-Match
を送信しない場合がある理由の1つは、応答に「HTTP /1.1」ステータス行ではなく「HTTP/1.0」が含まれている場合です。Djangoの開発サーバーなどの一部のサーバー、古いヘッダーを送信します(おそらく、キープアライブをサポートしていないため)。そうすると、ETagはChromeで機能しなくなります。
[応答ヘッダー]セクションで、解析されたバージョンの代わりに[ソースの表示]をクリックします。最初の行はおそらくHTTP/1.1 200 OK
のようなものになります— HTTP/1.0 200 OK
ChromeはETag
ヘッダーを無視しているようで、それを使用しないようですこのリソースの次のロード。
他の理由もあるかもしれません(たとえば、ETagヘッダー値が引用符で囲まれていることを確認してください)が、私の場合は他のすべての変数を削除しました。これが重要な理由です。
[〜#〜] update [〜#〜]:スクリーンショットを見ると、まさにその通りのようです(PythonのHTTP/1.0サーバー)あなたにも!
Djangoを使用していると仮定して、ローカル設定ファイルに次のハックを入れます。そうしないと、実際のHTTP /1.1プロキシを./manage.py runserver
デーモンの間に追加する必要があります。この回避策 モンキーパッチ より有用なステータス行を送信するためにDjangoによって内部的に使用されるキーWSGIクラス:
# HACK: without HTTP/1.1, Chrome ignores certain cache headers during development!
# see https://stackoverflow.com/a/28033770/179583 for a bit more discussion.
from wsgiref import simple_server
simple_server.ServerHandler.http_version = "1.1"
また、Webサイトの開発時によく行われるように、ブラウザでキャッシュが無効になっていないことを確認して、常に最新のコンテンツが表示されるようにします。
Chromeでも同様の問題があり、開発にhttp://localhost:9000
を使用していました(If-None-Match
は使用しませんでした)。
http://127.0.0.1:9000
Chromeに切り替える1 リクエストでIf-None-Match
ヘッダーの送信を自動的に再開しました。
さらに、Devtools > Network > Disable Cache [ ]
がオフになっていることを確認します。
1 これが文書化されている場所はどこにも見つかりません-Chromeがこのロジックの原因であると思います。
Chromeは私にも「If-None-Match」ヘッダーを送信していませんでした。キャッシュ制御ヘッダーがありませんでした。ブラウザを閉じて再度開くと、期待どおりに「If-None-Match」ヘッダーの送信が開始されました。したがって、ブラウザを再起動することは、この種の問題があるかどうかを確認するためのもう1つのオプションです。