2015-04-22 6 views
0

Я пытаюсь заставить HttpResponseCache кэшировать ответы на запросы, содержащие заголовок «Авторизация». Я включаю этот заголовок, потому что API, который я вызываю, использует базовую аутентификацию.Android HttpResponseCache и заголовок запроса «Авторизация»

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. Затем я отключу Wi-Fi и данные и снова сделаю запрос. Затем я получаю исключение FileNotFoundException при попытке прочитать тело ответа.

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

Если бы я сделать то же самое, но без заголовка «Authorization» (в приложение на другом сервере, который не использует базовую авторизацию), мой код может прочитать ответ из кэша ,

Я знаю, что кеш HTTP не предназначен для кэширования ответа, который был результатом запроса, включая заголовок «Авторизация», но означает ли это, что я просто не могу кэшировать ответы с этого сервера без письменного разрешения мой собственный кеш? Есть ли какой-либо известный способ обойти это или переопределить это поведение в HttpUrlConnection/HttpResponseCache?

Заранее благодарен!

ответ

1

Мне удалось разобраться с исходным кодом HttpResponseCache (через https://github.com/candrews/HttpResponseCache, пользовательскую версию класса, сделанных свечами из источника Android :)). Включая директивы «public», «must-revalidate» или «s-maxage» в заголовке Cache-Control ответа, позволит кэшировать HttpResponseCache, даже если заголовок авторизации был включен в запрос.

 Смежные вопросы

  • Нет связанных вопросов^_^