2015-10-18 71 views
1

具體來說,URL的哪些部分用於比較。假設我爲https://www.example.com/a/b/test.css提供了一個CSS樣式表,其中包含cache-controlmax-age等的相應HTTP標頭。當用戶稍後訪問以下每個URL時,哪些用戶將提供緩存文件?瀏覽器如何比較URL以進行緩存?

https://www.example.com/a/b/test.css 
https://www.example.com/a/b/test.css?abc=123 
https://www.example.com/a/b/test.css#abc=124 

基本上,我問的是,是否「搜索」和「散」的URL字符串的一部分,當瀏覽器來決定是否使用緩存的資源進行比較。此外,這種比較邏輯在瀏覽器中是一致的,還是某種標準的一部分?

回答

2

RFC 7234 states

主高速緩存鍵由請求方法和目標URI。

更根本的,RFC 7230 explains that

目標URI排除參考的片段組成部分,如果有的話, 因爲片段標識符被保留用於客戶端處理

把那些兩個在一起,前兩個資源是而不是等效(因爲查詢是URI的一部分)。最後一個指的是與第一個相同的資源。這是標準指定的行爲。

但是,請注意,以前版本的規範stated的:

注:[RFC2616]禁止緩存從計算 啓發式新鮮感與查詢組件(即包含那些 「的URI 13.9節? 「)。在實踐中,這並沒有被廣泛實施。

這表明某些實現不會緩存第二個示例,除非明確告知它是可緩存的。

+0

感謝您的美妙回答!你知道哪些特定的實現忽略查詢字符串嗎?特別是在現代瀏覽器/網頁瀏覽中。 – AlexZ

+0

[此答案](https://stackoverflow.com/a/5526887/733345)建議「很多舊版瀏覽器(包括IE6)」。 – Joe