[英]Chrome is caching an HTTP PUT request
我對Chrome有這個奇怪的問題。 它經常出現緩存PUT請求。
詳細信息:我有一個使用backbone.js的應用程序,當嘗試將某些更改保留到模型時(主干自動生成PUT請求),Chrome只是不會將該請求發送到服務器。 它在Firefox和IE中運行得非常好(到目前為止還沒有在Safari中看到過這個問題)。
以下是Chrome開發者工具“網絡”標簽的屏幕截圖。 如您所見,PUT請求的響應是從緩存返回的(請求沒有到達服務器!!)
這是同一請求的標題詳細信息的屏幕截圖。 再一次,很明顯Chrome並不打算將PUT請求發送到服務器。
請求的有效負載是JSON數據。 有關為什么會發生這種情況的想法/我做錯了什么?
更新: Chromium已經確認這確實是一個錯誤 (感謝JanHanč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();
}
我使用額外的參數來避免緩存:
url += '?_dc=' + Math.random().toFixed(20).replace('.', '');
我不解釋服務器端的這個參數。
編輯:除了chrome之外,還有很多東西可以緩存請求 - 例如用戶的代理服務器。 我認為額外的查詢參數是一個很好的解決方案,以防止緩存。
Backbone使用jQuery或Zepto來發出AJAX請求。 假設您正在使用jQuery,請關閉緩存。
運行此命令可在整個應用程序中關閉緩存,因此您無需擔心緩存:
$.ajaxSetup({
cache : false
});
如果保持緩存對您的業務很重要,我認為您可以針對特定的無緩存調用執行類似的操作:
model.save({}, {cache:false});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.