Заголовки HTTP, связанные с кэшем, переопределяются в ответе сервлета на App Engine

У меня есть сервлет на движке приложений, который обслуживает изображения.

Сервлет правильно устанавливает значения заголовка HTTP, чтобы указать, что изображения должны быть кэшированы. Но App Engine переопределяет эти заголовки, в результате чего изображения не кэшируются.

Обратите внимание, что тот же код работал раньше, но это не такне работает в течение некоторого времени

Документация движка приложения гласит, что если,Cache-ControlExpires а такжеVary заголовки задаются сервлетом, они останутся неизменными:https://developers.google.com/appengine/docs/java/runtime#Responses

Это мой пример кода:

response.setContentType( "image/jpeg" );
//response.setDateHeader( "Expires", new Date().getTime() + 60L*24*60*60*1000 ); // 60 days cache time
//response.addHeader( "Cache-Control", "public, max-age=5184000" ); // 5_184_000 sec = 60 days cache time
response.addHeader( "Cache-Control", "public, max-age=90000" ); // 90_000 sec = 25 hours cache time
response.getOutputStream().write( data ); // Data is a byte array containing the JPEG image data

(Я'Мы постарались поместить все, что закомментировано.)

Изучая HTTP-запрос-ответ, ответ содержит следующие заголовки:

HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
cache-control: public, max-age=90000
cache-control: no-cache, must-revalidate
content-length: 6777
content-type: image/jpeg
date: Sat, 05 Jan 2013 14:11:47 GMT
expires: Fri, 01 Jan 1990 00:00:00 GMT
pragma: no-cache
server: Google Frontend

Как видите, App Engine вставляет,cache-controlexpires а такжеpragma Заголовки отключают кеширование. Обратите внимание, что это связано с тем, что запрос имеетcookie заголовок. Но и документация наhttps://developers.google.com/appengine/docs/java/runtime#Responses заявляет, что в этом случае (когда установлен cookie), движок приложения настроит кэширование как частное, так что браузеры все еще смогут его кэшировать, но не промежуточные прокси-серверы. Я не добавляю файлы cookie, но код Google Analytics (явключили Google Analytics на странице).

Что я делаю неправильно? Как я могу добиться правильного кэширования ответа сервлета?

РЕДАКТИРОВАТЬ: Дальнейшее расследование показало, что файлы cookie добавляются в запросы, потому что я использую аутентификацию Google, и если пользователь входит в систему, используя свою учетную запись Google, файлы cookie, связанные с пользователем, по понятным причинам добавляются. Если ни один пользователь не вошел в систему, кэширование не отменяется. Поэтому мой следующий вопрос: существует ли способ кэширования изображений, обслуживаемых сервлетами, когда пользователь входит в систему с учетной записью Google?

РЕДАКТИРОВАТЬ, РЕШЕНИЕ: Google App Engine отключает кэширование, только если клиентом является пользователь-администратор приложения. В этом случае App Engine автоматически вставляет заголовки, предназначенные только для администратора, например примерную стоимость запроса. Это личная информация, поэтому понятно, что кэширование отключено.

Ответы на вопрос(1)

Ваш ответ на вопрос