【问题标题】:How to prevent Android from returning a cached response to my HTTP Request?如何防止 Android 向我的 HTTP 请求返回缓存响应?
【发布时间】:2011-02-11 04:15:59
【问题描述】:

我正在编写一个客户端,该客户端对随时间变化的 xml 数据发出重复的 http 请求。看起来 Android 堆栈正在缓存我的页面请求并重复返回相同的页面。如何确保每次都能获得新页面?

--代码---

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response;
    response = client.execute(request);

InputStream in;
in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

谢谢, 格里

【问题讨论】:

    标签: android http httprequest no-cache


    【解决方案1】:

    在 URL 的末尾附加一个未使用的参数:

    HttpGet request = new HttpGet(url + "?unused=" + someRandomString());
    

    其中someRandomString() 可能涉及当前时间。

    它很粗糙,但几乎可以保证不管所有可能导致“正确”解决方案失败的外部因素(例如配置错误或有问题的代理)都可以正常工作。

    【讨论】:

    • 这对我有用,但是客户端是否有任何标题要添加以规避问题?
    【解决方案2】:

    添加 HTTP 标头:

    Cache-Control: no-cache
    

    看看是否可行。

    【讨论】:

    • 使用 no-cache 和 no-store 似乎不会影响结果。添加更改的虚假参数似乎也不起作用。我正在使用: HttpClient 客户端 = new DefaultHttpClient(); HttpGet 请求 = 新的 HttpGet(url); HttpResponse 响应;尝试 { request.setHeader("Cache-Control", "no-cache"); request.setHeader("Cache-Control", "no-store");响应 = client.execute(request);其他人在这方面有任何成功吗?否则平台对我来说毫无用处。
    • 您是否添加了两个标题?还是一次只有一个?
    • 两个标题同时出现。
    • 好的,我明白了。首先,您不应该将相同的标头添加两次,您应该将两个值都添加一次,其次,您应该在响应对象上添加它 - 也就是说服务器需要添加该标头。
    • 所以解决方案也是更改满足我请求的服务器代码。这很有趣,因为在黑莓或 iPhone 上不需要这样做。我想谷歌可以通过两种方式之一来处理对相同 url 的请求,并且他们选择了与其他手机操作系统公司相反的方式。
    【解决方案3】:

    提示:获取随机字符串

    HttpGet request = new HttpGet(url + "?unused=" + UUID.randomUUID().toString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2012-04-13
      • 2015-07-31
      相关资源
      最近更新 更多