Android HttpResponseCache和"授权"请求标头

时间:2015-04-22 13:50:12

标签: android caching basic-authentication httpresponsecache

我试图让HttpResponseCache缓存对包含"授权"的请求的响应。头。我包含此标头,因为我呼叫的API使用基本身份验证。

HttpUrlConnection connection = initialiseConnection();
String usernameAndPasswordString = Base64.encodeToString(String.format("%s:%s", username, password).getBytes(), Base64.NO_WRAP);
connection.setRequestProperty("Authorization", String.format("basic %s", usernameAndPasswordString));`

为了测试这一点,我打开了启用WiFi的请求。我然后关闭WiFi和数据并再次发出请求。然后,当我尝试读取响应主体时,我得到一个FileNotFoundException。

InputStream inputStream = new BufferedInputStream(connection.getInputStream());

如果我做同样的事情,但没有"授权"标题(对于不使用基本身份验证的其他服务器上的应用程序),我的代码能够从缓存中读取响应。

我知道HTTP缓存并不意味着缓存一个请求的响应,该响应包括"授权"标题,但这是否意味着我无法在不编写自己的缓存的情况下缓存来自此服务器的任何响应?有没有任何已知的方法或在HttpUrlConnection / HttpResponseCache中覆盖此行为?

提前致谢!

1 个答案:

答案 0 :(得分:2)

我通过浏览HttpResponseCache的源代码(通过https://github.com/candrews/HttpResponseCache,通过取自Android源代码的candrews的类的自定义版本:)设法了解到这一点。)。在响应的Cache-Control标头中包含“public”,“must-revalidate”或“s-maxage”指令将允许HttpResponseCache进行缓存,即使Authorization标头包含在请求中也是如此。