2016-05-31 61 views
1

在示例演示應用程序中,我使用React Native進行網絡調用。 React Native使用NSURLSessionNSURLRequestUseProtocolCachePolicy作爲默認緩存策略。當網絡調用時,由服務返回的響應包含這些高速緩存控制標題:通過React Native使用必須重新驗證NSURLSession

public, max-age=10, must-revalidate 

我能注意到那是什麼NSURLSession不兌現10秒如果max-revalidate存在。相反,如果後者在10秒內發生新的網絡呼叫時不存在,則返回高速緩存響應,否則將進行新的呼叫。

基於14.9.4 Cache Revalidation and Reload Controls部分,這不應該是預期的行爲,但也許我錯了。

因爲高速緩衝存儲器可被配置爲忽略服務器的指定 期滿時間,並且因爲客戶端請求可以包括一個MAX-陳舊 指令(其具有類似的效果),該協議還包括一個 機構,用於原始服務器要求在任何後續使用中重新驗證緩存 條目。當高速緩存接收到的響應中必須重新生效指令爲 時,該高速緩存不應使用 條目,該條目在變得陳舊後不響應後續請求 ,而無需先用源服務器對其進行重新驗證。 (即緩存 必須每次做一個終端到終端的重新確認,如果僅僅基於 原始服務器的過期或max-age的值,緩存的響應是 陳舊。)

我發現關於這個問題的一個有用的討論:HTTP Cache Control max-age, must-revalidate。根據討論,似乎協議是有點

這裏含義模糊,但在實踐中我發現,必重新驗證 意味着無論最大年齡的,必須重新驗證。

一個很奇怪的事情是,如果我做同樣與Android,同時使用max-agemust-revalidate的行爲是正確的。在10秒後,將發出新的請求。在10秒內沒有請求。

任何線索?

回答

0

我做了一些測試,看起來在iOS(使用NSURLSession)時,只要設置了must-revalidate,就不會考慮max-age。對於Android來說,這兩個值可以一起使用是一個不同的故事。

P.S.如果某位HTTP協議專家對此有疑問,請告訴我。