我有一個可以在URL /產品上訪問的頁面。當我在瀏覽器中訪問它時,它會在佈局中響應整個頁面。下面是請求頭和響應身體的一個簡化的例子:瀏覽器不區分通過AJAX獲取的部分HTML和整頁
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<layout>
<products />
</layout>
當使用者做一些搜索經由AJAX的JavaScript更新結果。因爲它需要時間來呈現的結果沒有佈局呈現,我並不需要它無論如何:
Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
X-Requested-With: XMLHttpRequest
<products />
所以,這個工作得很好,直到我說緩存Cache-Control: private, max-age=3600
。最初,我雖然會添加Vary: X-Requested-With
標題,瀏覽器會區分這兩個響應。但是,當我通過AJAX獲取/產品,然後訪問瀏覽器中的/ products時,它會顯示部分AJAX響應。
有沒有簡單的方法來解決這個問題?
P.S.如果有問題,我使用Ruby on Rails和jQuery。
你試過了'Vary:Accept'嗎? – regilero
是的,它也不起作用。我認爲瀏覽器正在緩存這兩個響應。但是由於Content-Type:text/html,它將它們同等對待並顯示最後一個恰好是部分的。 –
其實,我試着用JSON迴應,現在它顯示JSON。所以這不依賴於Content-Type:text/html。我很驚訝「Vary」在這裏沒有任何效果。 –