我可以停止 HTTPResponseCache 在 Cache-Control headers 方面表现得像共享缓存吗?
Can I stop HTTPResponseCache behaving like a shared cache in regard to Cache-Control headers?
我正在尝试在我的应用程序中使用内置的 HTTPResponseCache
(通过 HTTPURLConnection
API 发出请求)但是在尝试让它缓存任何响应时遇到了问题要求包含 Authorization
header。
我可以让它在 all 缓存响应的唯一方法是明确地将 'public' 放入 Cache-Control
响应 header在服务器上(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 分开实现,并按照用户代理缓存的预期实现缓存控制的处理headers。
我正在尝试在我的应用程序中使用内置的 HTTPResponseCache
(通过 HTTPURLConnection
API 发出请求)但是在尝试让它缓存任何响应时遇到了问题要求包含 Authorization
header。
我可以让它在 all 缓存响应的唯一方法是明确地将 'public' 放入 Cache-Control
响应 header在服务器上(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 分开实现,并按照用户代理缓存的预期实现缓存控制的处理headers。