2016-01-19 31 views
-2

所以我寫了一個程序,我正在運行無限數量的GET請求來從遠程服務器檢索json文件。該程序在json文件更改時完成。我正在運行該程序的兩個實例。我的問題是,一個程序檢測到文件更改,而另一個程序仍然沒有檢測到文件更改。java是否緩存標準的GET請求?

JSON文件很簡單,

{ 「地位」: 「完整」}

{ 「地位」: 「不完全」}

基本僞碼是,

while(status == "incomplete") { 
     HttpGet httpget = new HttpGet(
     "http://www.website.com/file.json"); 
     HttpResponse response = httpClient.execute(httpget); 
     ... 
    } 
+1

也許避免緩存的最簡單的解決方案是在網址中添加'?timestamp = 128318238123' ...你可能想看看這裏:https://hc.apache.org/httpcomponents-client- ga/tutorial/html/caching.html – Marged

+0

所以比較你的兩個程序,看看他們有什麼不同 – wero

回答

0

您可以嘗試通過設置以下參數設置在服務器端緩存:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
response.setHeader("Pragma", "no-cache"); 
response.setHeader("Expires", "0"); // 
0

阿帕奇HttpClient 4.5支持緩存,但默認客戶端不緩存,見HTTP Caching

HttpClient Cache提供了一個與HTTP/1.1兼容的緩存層,可以與HttpClient一起使用 - 與瀏覽器緩存相當的Java。該實現遵循責任鏈設計模式,其中緩存HttpClient實現可以用於替代默認非緩存HttpClient實現;完全可以從緩存滿足的請求不會導致實際的原始請求。使用條件GET和If-Modified-Since和/或If-None-Match請求標頭,可以儘可能使用原始地址自動驗證陳舊的高速緩存條目。