2016-12-06 90 views
1

我有一個Web服務,它將ETag放在每個響應中,以便將來的調用可以使用HTTP 304(未修改)狀態。 ETag實際上只是生成查詢類型的Base64編碼以及時間戳。ETag with Accept-Language

我遇到的問題是,如果瀏覽器請求具有區別Accept-Language的相同資源。瀏覽器當前發送相同的If-None-Match標題,所以響應是304,即使認爲實際資源會以不同的語言返回。所以我認爲這樣做的方法是添加一個Vary Header,以向客戶端指定該響應使用Accept & Accept-Language進行響應,如下所示。

各不相同:接受,接受語言

但是我的瀏覽器(Chrome)使用相同的ETag無論是接受語言的。在這裏使用什麼正確的約定?

謝謝

回答

0

電子標籤標識響應內容。 所以最好使用E-Tag構造的響應體散列。 至少您可以使用查詢和語言連接的散列。

+0

這對我來說似乎有點弱,我可以在ETag中編碼實際的內容,但是當客戶端試圖在不同語言(fr)中使用相同的ETag作爲相同的資源時,我將不得不簡單地分配一個新的ETag for fr。當客戶現在再次查詢相同的內容時回到原來的語言,他們的fr ETag將被忽略,並將被傳遞一個新的ETag,所以他們不使用304.這個緩存解決方案似乎很弱,因爲有一個解決這個用例(VARY),它通知客戶端哪些http頭會影響輸出內容。 – Agent96