android - 我可以停止 HTTPResponseCache 在 Cache-Control header 方面表现得像共享缓存吗?

标签 android http caching cache-control httpresponsecache

我正在尝试在我的应用程序中使用内置的 HTTPResponseCache(通过 HTTPURLConnection API 发出请求)但是在尝试让它缓存任何响应时遇到了问题请求时包含一个 Authorization header 。

我让它在 all 缓存响应的唯一方法是在服务器上的 Cache-Control 响应 header 中显式放置“public”(s-maxage 也可能有效,还没有尝试过,但是显式地放置 private 会导致没有缓存);但这将意味着任何中间代理都将缓存响应以服务于其他客户端,这不是我想要的。

我的理解是,默认情况下,用户代理缓存会缓存使用 Authorization header 或 private header 请求的响应。看起来 HTTPResponseCache 在解释 header 方面就像一个共享缓存,而不是用户代理缓存。还是我对缓存标准的理解不正确?

有什么方法可以让缓存像用户代理 HTTP 缓存一样工作?

这在我的安装代码中:

public static void setupCache(Context context, long httpCacheSize){
  File httpCacheDir = new File(context.getCacheDir(),"http");
  HttpResponseCache.install(httpCacheDir, httpCacheSize);
}

我需要在这里做些不同的事情吗?或者我可能需要在我的请求中包含一些用户代理信息?

最佳答案

虽然我没有找到解决这个特定问题的方法,但我通过重构我的 HTTP 客户端代码以使用 Volley ( http://developer.android.com/training/volley/index.html ) 而不是 HTTPURLConnection 来解决我的问题。 Volley 中的缓存设施与 HTTPResponseCache 分开实现,并按照用户代理缓存的预期实现缓存控制 header 的处理。

关于android - 我可以停止 HTTPResponseCache 在 Cache-Control header 方面表现得像共享缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32394709/

相关文章:

Android:Twitter oAuth 给出 OAuthNotAuthorizedException 错误

android - 如何测试由 fragment 使用的 Activity 实现的接口(interface)?

android - 如何在 Android 的 EditText 中提供放大镜效果?

http - HTTP 请求未在响应中执行 - Flutter/Dart

algorithm - 带有 GraphQL 响应属性过期的 JSON 对象缓存

ios - 如何缓存来自 API 的响应以防止额外的调用?

asp.net - ASP.Net 使用什么缓存算法?

android - SQLiteDatabase.OpenDatabase 是 Fragment 中的 NullPointerException

javascript - 我应该担心太多重复的图像下载吗?

laravel 重定向回发布路由,我得到 MethodNotAllowedHttpException