簡體   English   中英

Chrome正在緩存HTTP PUT請求

[英]Chrome is caching an HTTP PUT request

我對Chrome有這個奇怪的問題。 它經常出現緩存PUT請求。

詳細信息:我有一個使用backbone.js的應用程序,當嘗試將某些更改保留到模型時(主干自動生成PUT請求),Chrome只是不會將該請求發送到服務器。 它在Firefox和IE中運行得非常好(到目前為止還沒有在Safari中看到過這個問題)。

以下是Chrome開發者工具“網絡”標簽的屏幕截圖。 如您所見,PUT請求的響應是從緩存返回的(請求沒有到達服務器!!) Chrome緩存PUT請求

這是同一請求的標題詳細信息的屏幕截圖。 再一次,很明顯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM