2013-01-10 5 views
6

Obwohl diese Frage trivial sein sollte, war es nicht erfolgreich, Browser-Caching auf Web-Google-App-Engine-Java-Server zu ermöglichen.Wie Browser-Caching in GAE aktivieren

Ich habe versuchen, diese Art der Sache in meinem appengine-web.xml zu setzen:

<static-files> 
    <include path="/**.cache.**" expiration="365d" /> 
... 

aber wenn ich die Antwort-Header suche ich finde das in local:

Content-Length: 196084 
Cache-Control: public, max-age=31536000 
Expires: Fri, 10 Jan 2014 19:40:45 GMT 
Content-Type: image/png 
Last-Modified: Tue, 18 Dec 2012 21:41:22 GMT 
Server: Jetty(6.1.x) 

was in Ordnung ist ... aber das in der Produktionsumgebung:

HTTP/1.1 304 Not Modified 
ETag: "RV4Bpg" 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=109 cpu_ms=0 
Date: Thu, 10 Jan 2013 19:41:20 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Server: Google Frontend 

welche definitiv nicht ist, was ich will :(

Irgendeine Idee? etwas was ich verpasst habe?

[EDIT] für noch nicht heruntergeladenen Inhalt, empfangen mein Browser die folgenden Header:

HTTP/1.1 200 OK 
ETag: "RV4Bpg" 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Expires: Sat, 11 Jan 2014 12:50:50 GMT 
Cache-Control: public, max-age=31536000 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=3 cpu_ms=0 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Content-Type: image/png 
Server: Google Frontend 
Content-Length: 196084 
Proxy-Connection: Keep-Alive 
Connection: Keep-Alive 
X-RBT-Optimized-By: eu-dcc-sh02 (RiOS 6.5.5b) SC 

Ein ETag und mehrere widersprüchliche 'Läuft ab' und 'Cache-Control' ... Gibt es mehrere Möglichkeiten zum Konfigurieren der Caching-Richtlinie? Könnte es von meinem ISP kommen? oder ein Proxy?

+0

Mögliches Duplikat [Cache-bezogenen HTTP-Header in Servlets Antwort auf App Engine außer Kraft gesetzt werden] (http://stackoverflow.com/questions/14172758/cache-related-http-headers-are-overridden-in- servlet-response-on-app-engine) – icza

Antwort

9

Wenn Sie sich in einer Engine-Anwendung Google App als Administrator angemeldet sind:

  1. Die X-AppEngine-* Header in Ihrer Frage gezeigt sind enthalten.
  2. Der Header Cache-Control: no-cache, must-revalidate ist enthalten, da die Header X-AppEngine-* privat sind und nicht zwischengespeichert werden müssen.

    Antworten mit Ressourcennutzungsstatistiken werden aus uncachebar:

Dies ist bei https://developers.google.com/appengine/docs/python/runtime#Responses, der das sagt am Ende des Responses Abschnitt versteckt.

+0

Brummen, du hast Recht. Tanks für alle. – Kroc

+1

Ich hatte ähnliche Probleme wie in den gestellten Fragen, und ich möchte darauf hinweisen, dass Sie auch dann, wenn Sie nicht als GAE - Administrator angemeldet sind (zB Chrome als Gast oder Abmelden verwenden), 304 erhalten können Mein Fall, ich habe Chrome, nicht als GAE Admin eingeloggt, hatte Dev-Tools geöffnet, "Cache deaktivieren (während DevTools geöffnet ist)" wurde deaktiviert. Immer noch 304. Ich fand heraus, dass der Grund dafür war, dass der Browser keinen Cache verwendet, wenn er Cmd + R (oder Strg + R) drückt. Versuchen Sie, auf das URL-Feld des Browsers zu klicken und drücken Sie stattdessen die Eingabetaste, und alle diese 304 sollten jetzt 200 (Cache) sein. – stianlp

2

Ja, Cache-Control ausgeschaltet ist, weil die Antwort HTTP 304

Das Problem ist, dass Ihr Browser den ETag gespeichert: http://en.wikipedia.org/wiki/HTTP_ETag

nun für jede Anforderung für die gleiche URL/content, Browser bietet ETag und GAE antwortet mit HTTP 304 nicht geändert.

Versuchen Sie, die Ressource (Bild) in dieser URL zu ändern, indem Sie eine andere URL überprüfen, die Sie noch nicht in diesem Browser geladen haben, oder einen anderen Browser oder Computer insgesamt verwenden.

Auch dies ist relevant: What takes precedence: the ETag or Last-Modified HTTP header?

+0

Vielen Dank, dass Sie sich für dieses ETag-Feature entschieden haben. Für neue Inhalte erhält der Browser ein ETag- und Expires-Datum. (Ich werde den Header jetzt nicht veröffentlichen, weil ich nicht in einem ähnlichen Zustand bin.zB Proxy) Ich werde meine Frage vervollständigen. – Kroc