Los encabezados HTTP relacionados con la memoria caché se anulan en la respuesta de Servlet en App Engine

Tengo un servlet en el motor de la aplicación que sirve imágenes.

El servlet establece los valores del encabezado HTTP correctamente para indicar que las imágenes deben almacenarse en caché. Pero App Engine anula estos encabezados, lo que hace que las imágenes no se almacenen en caché.

Tenga en cuenta que el mismo código funcionó antes, pero ahora no funciona desde hace algún tiempo.

La documentación del motor de la aplicación indica que siCache-Control, Expires yVary Los encabezados son establecidos por el servlet, se dejarán sin modificar:https://developers.google.com/appengine/docs/java/runtime#Responses

Este es mi código de muestra:

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

(He intentado poner todo lo que está comentado).

Al examinar la solicitud-respuesta HTTP, la respuesta contiene los siguientes encabezados:

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

Como puedes ver, App Engine insertacache-control, expires ypragma encabezados deshabilitando el almacenamiento en caché. Tenga en cuenta que esto se debe a que la solicitud tiene uncookie encabezamiento. Pero también la documentación enhttps://developers.google.com/appengine/docs/java/runtime#Responses indica que en este caso (cuando se establece una cookie), el motor de la aplicación configurará el almacenamiento en caché para que sea privado, por lo que los navegadores aún podrán almacenarlo en la memoria caché pero no los servidores proxy intermedios. Ni siquiera agregué las cookies, sino el código de Google Analytics (habilité Google Analytics en la página).

¿Qué estoy haciendo mal? ¿Cómo puedo lograr un almacenamiento en caché adecuado de la respuesta del servlet?

EDITAR: La investigación posterior mostró que las cookies se agregan a las solicitudes porque uso la autenticación de Google, y si un usuario inicia sesión con su cuenta de Google, las cookies relacionadas con el usuario se agregan, de manera comprensible. Si ningún usuario ha iniciado sesión, el almacenamiento en caché no se anula. Así que mi pregunta adicional es: ¿hay una manera de almacenar en la memoria caché las imágenes servidas por servlets cuando el usuario ha iniciado sesión con una cuenta de Google?

EDITAR, SOLUCION: Google App Engine solo desactiva el almacenamiento en caché si un usuario administrador de la aplicación es el cliente. En este caso, App Engine inserta automáticamente los encabezados destinados solo para el administrador, por ejemplo, el costo estimado de la solicitud. Esta información es privada, por lo que es comprensible que el almacenamiento en caché esté deshabilitado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta