2016-07-29 68 views
0

我有一個API來處理緩存控制。服務器將設置響應頭「last-modified」,並且來自瀏覽器的下一個請求將具有If-modified-Since頭。ajax 304未修改無法收到迴應

但是,當我使用ajax來請求API時,它不會自動設置If-modified-Since標題。 而且我設置了If-modified-Since在ajax請求頭中,服務器響應304狀態碼。但響應主體是空的。

ajax是否需要手動執行有關緩存控制的瀏覽器行爲?

有沒有更好的解決方案?

我找到一個相似的問題here

回答

0

最後,它解決了我研究this後。

設置請求頭

'Cache-Control': 'max-age=0' 

如果響應提供Last-Modified頭,下一個請求將自動設置的If-Modified-Since和值是相等的。

當發生304響應時,響應內容來自瀏覽器緩存。

0

304響應的響應主體應該是空的,這就是它的工作原理。 The protocol指出:

304響應絕不能包含消息體,因此總是由頭字段後面的第一個空行終止。

因此,如果您發送的請求與If-modified-since並且條件不符合,您將不會得到響應正文(實際數據)。你基本上是說你有內容,只有在更新的時候才需要它。

儘量不要使用If-Modified-Since頭,轉而使用Cache-control頭:

$.ajax({ 
... 
headers: { 
    'Cache-Control': 'max-age=1000' 
} 
... 
}); 
+0

我不得不使用If-Modified-Since標題來驗證被更改的數據。順便說一下,請求和響應中的Cache-Control在哪裏不一樣? – Jim

相關問題