Mam aplet na silniku App, który obsługuje obrazy.Nagłówki HTTP związane z pamięcią podręczną są nadpisywane w odpowiedzi Serwletu na App Engine
Serwlet ustawia wartości nagłówka HTTP odpowiednio, aby wskazać, że obrazy mają być buforowane. Ale App Engine zastępuje te nagłówki, co powoduje, że obrazy nie są buforowane.
Należy zauważyć, że ten sam kod pracował wcześniej, ale nie działa już od jakiegoś czasu.
App dokumentacja silnika stwierdza, że jeśli Cache-Control
, Expires
i Vary
nagłówki są ustalane przez serwlet, będą lewo niemodyfikowana: https://developers.google.com/appengine/docs/java/runtime#Responses
To jest mój przykładowy kod:
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
(I próbowałem wstawić wszystko, co jest komentowane.)
Badanie odpowiedzi HTTP na żądanie, odpowiedź zawiera następujące informacje Ders:
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
Jak widać, App Engine wstawia cache-control
, expires
i pragma
nagłówki wyłączanie buforowania. Należy pamiętać, że dzieje się tak dlatego, że żądanie ma nagłówek cookie
. Ale także dokumentacja pod adresem stwierdza, że w tym przypadku (gdy plik cookie jest ustawiony), silnik aplikacji skonfiguruje buforowanie jako prywatne, aby przeglądarki nadal mogły go buforować, ale nie pośrednie serwery proxy. Pliki cookie nie są jeszcze dodawane przeze mnie, ale kod Google Analytics (włączam Google Analytics na stronie).
Co robię źle? Jak uzyskać prawidłowe buforowanie odpowiedzi serwletu?
EDIT: Dalsze badania wykazały, że pliki cookie są dodawane do żądania, ponieważ używam uwierzytelniania Google, a jeśli użytkownik jest zalogowany przy użyciu jego/jej konto Google, związanych ciasteczka są dodawane przez użytkownika, co zrozumiałe. Jeśli żaden użytkownik nie jest zalogowany, buforowanie nie zostanie zastąpione. Moje dalsze pytanie brzmi: czy istnieje sposób buforowania obrazów serwletów, gdy użytkownik jest zalogowany na konto Google?
EDIT, ROZWIĄZANIE: Google App Engine wyłącza buforowanie tylko wtedy, gdy użytkownik Administrator aplikacji jest klient. W tym przypadku App Engine automatycznie wstawia nagłówki przeznaczone tylko dla administratora, na przykład szacowany koszt żądania. To jest prywatna informacja, więc jest zrozumiałe, że buforowanie jest wyłączone.
To 25 godzin, prawda? max-age określa sekundy. 90000sec = 1500min = 25 godzin – NagyI
@NagyI Dobrze, to był literówka. – icza