【问题标题】:Cannot achieve HTTP caching in android无法在android中实现HTTP缓存
【发布时间】:2013-06-25 16:39:21
【问题描述】:

我一直在尝试使用 OkHttp 和 Retrofit 来缓存 http 请求。但我似乎不明白为什么它不起作用。

@Headers("Cache-Control: public, max-age=640000, s-maxage=640000 , max-stale=10000000")
    @FormUrlEncoded
    @POST("/news/getNewslist/")
    void newsListByGenre(@Field("news_genre") String genre,
            Callback<ArrayList<NewsStory>> callback);

这是请求之一,它具有所有必需的标头。此外,为了测试是否将某些内容写入文件缓存,我手动为 OkHttpClient 分配了一个缓存。

OkHttpClient name = new OkHttpClient();

            try {
                if (!cache.exists())
                    cache.createNewFile();
                name.setResponseCache(new HttpResponseCache(cache,
                        10 * 1024 * 1024));
            } catch (IOException e) {
                e.printStackTrace();
            }

我创建的文件缓存只有 36 个字节,所以我确定没有缓存。

我还尝试确保服务器具有所需的标头,虽然我希望它在不受服务器干扰的情况下工作,但我也在请求中设置了缓存控制标头。这是改造后的调试日志。

null: HTTP/1.1 200 OK
Cache-Control: public, max-age=360000
Connection: Keep-Alive
Content-Length: 5167
Content-Type: application/json
Date: Fri, 28 Jun 2013 01:00:22 GMT
Keep-Alive: timeout=5, max=99
Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
X-Android-Received-Millis: 1372381311315
X-Android-Response-Source: NETWORK 200
X-Android-Selected-Transport: http/1.1
X-Android-Sent-Millis: 1372381311048
X-Powered-By: PHP/5.4.7

我一遍又一遍地阅读http的缓存机制,但似乎我错过了一些东西。

【问题讨论】:

标签: java android http caching httpclient


【解决方案1】:

您无法真正缓存 POST 响应。请改用GET 方法。这是一个带有缓存的 Retrofit 和 OkHttp 的工作示例:

https://gist.github.com/swankjesse/5889518

【讨论】:

  • 本地缓存 POST 请求的最佳方法是什么,应该扩展改造模块的哪些部分来实现这一点。
  • 如果作为默认设置,改造不会缓存响应,我认为这是正确的吗?
【解决方案2】:

@Jesse Wilson - 我认为有时缓存响应是有意义的 - 我正在开发一个进行网络调用的应用程序,但如果用户切换活动并返回,我想使用与之前返回的相同数据发布响应。 我知道我可以使用 ORM 和持久化 mu 对象等,只是告诉改造使用相同的响应似乎要容易得多。

【讨论】:

  • 不幸的是,缓存 HTTP 帖子没有好的语义。最好的办法是配置 Web 服务以使用 OkHttp 应该处理的POST/REDIRECT/GET
  • 如果有人可以提供帮助,我无法使用 OkHttp 使缓存正常工作...stackoverflow.com/questions/22445177/…我不确定我是否做得对,如果我是,我只是扔在那里,不确定它应该等同于什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2012-05-08
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多