Chrome でこの奇妙な問題が発生しました。PUT リクエストをキャッシュしているように見えることがよくあります。
詳細: backbone.js を使用するアプリがあり、モデルにいくつかの変更を永続化しようとすると (バックボーンは自動的に PUT 要求を生成します)、Chrome はその要求をサーバーに送信しません。Firefox と IE では問題なく動作します (これまでのところ、Safari で問題は発生していません)。
これは、Chrome デベロッパー ツールの [ネットワーク] タブのスクリーンショットです。ご覧のとおり、PUT 要求に対する応答がキャッシュから返されています (要求はサーバーにヒットしません!!)。
同じリクエストのヘッダー詳細のスクリーンショットを次に示します。繰り返しになりますが、Chrome が PUT 要求をサーバーに送信する手間を省いていることは明らかです。
リクエストのペイロードは JSON データです。なぜこれが起こっているのか/私が間違っていることについて何か考えはありますか?
更新: Chromium は、これが最終的なバグであることを確認しました(Jan Hančič に感謝します)。
一時的な解決策 メソッドを
オーバーライドBackbone.sync
し、PUT、POST、および DELETE リクエストのクエリ文字列にタイムスタンプを追加して、常に一意になるようにしました。
if(!options.data && model && (method == 'create' || method == 'update' || method == 'delete')) {
params.url += (params.url.indexOf('?') == -1 ? '?' : '&') + '_=' + new Date().getTime();
}