Android 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 ответ

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

Другие вопросы по тегам