2013-01-05 12 views
6

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.

+0

To 25 godzin, prawda? max-age określa sekundy. 90000sec = 1500min = 25 godzin – NagyI

+0

@NagyI Dobrze, to był literówka. – icza

Odpowiedz

4

Zgodnie z dokumentami nagłówki powinny być nadpisywane tylko wtedy, gdy zalogowanym użytkownikiem jest administrator. Czy sprawdziłeś, czy tak jest?

+0

Tak, dokładnie tak jest. Odkryłem to kilka tygodni temu, po prostu zapomniałem zaktualizować wpis. Robić to teraz. – icza

+0

Akceptuję również odpowiedź, mimo że została wcześniej rozwiązana. – icza

+0

Dzięki, cieszę się, że udało się to naprawić. –

Powiązane problemy