2010-06-10 70 views
7

我想知道如何緩存與基於內容協商的API協同工作。由於獲得XML或JSON的資源時,URI將是相同的,例如:其餘內容協商和緩存

http://example.com/bikes/mountain 

的服務回報基礎上,接受類型頭JSON/XML。高速緩存有多聰明?

例如:

  • 如果一個客戶要求使用這種類型的接受返回XML。
  • 響應被web服務器緩存了1分鐘。 秒客戶端請求使用接受類型相同的資源返回JSON

是否緩存檢查接受/內容類型呢?或者這會導致JSON請求者獲取XML數據,因爲這是服務器緩存的內容?我希望這是如此明顯,它已經被照顧,否則,這不是一個非常大的參數,在URI中包含.xml/.json?

我想我的問題基本上是,我仍然可以安全地使用內容協商,同時仍然使用標準的緩存技術?

回答

2

Darrel正確,因爲Vary頭告訴客戶端哪些請求頭可以變化以獲得資源的不同表示。

該值通過設置或更改Accept標頭(在您的情況下爲JSON或XML)告訴客戶它可以以不同的文件格式請求表示。如果您使用Accept-Language標題,您還可以用英語和法語獲得山地自行車的不同表示形式。

這兩個請求發送不同的值,所以它們應該總是分開緩存。

當您在Vary標頭中使用'*'值時,意味着不應該緩存響應。

2

是的。請看RFC 2616

的描述在我對各種頭文件的簡單理解中,高速緩存將使用在頭文件中命名的頭文件字段來唯一標識高速緩存表示。