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.