2009-07-07 8 views
1

Guten Tag,Aktivieren Browser-Caching über java

ich CacheFilter bin mit einem bestimmten Weg zu meinem Server filtern (das gibt einen Bildstrom in den Antwortstream). Und ich konfiguriert habe es in meiner web.xml wie folgt:

<filter> 
    <filter-name>imagesCache</filter-name> 
    <filter-class>com.samaxes.cachefilter.presentation.CacheFilter</filter-class> 
    <init-param> 
     <param-name>privacy</param-name> 
     <param-value>public</param-value> 
    </init-param> 
    <init-param> 
     <param-name>expirationTime</param-name> 
     <param-value>2592000</param-value> 
    </init-param> 
</filter> 

... 
<filter-mapping> 
    <filter-name>imagesCache</filter-name> 
    <url-pattern>/my/path/*</url-pattern> 
</filter-mapping> 

mein firefox benutzen, wenn ich meine URL über die Adressleiste zugreifen, trifft es den Server zum ersten Mal verwendet aber den Cache während der Gespräche erfolgreich. Wenn sich die URL jedoch in meiner Seite befindet (d. H. <img src="..."/>), scheint sie den Server ständig zu treffen.

[EDIT] Nach ein paar weiteren Tests funktioniert der Zugriff auf mein Bild über die Adressleiste nicht immer. Aber Caching scheint öfter damit zu arbeiten als. Ob es wirklich so ist, bin ich mir nicht sicher.

Zusätzliche Informationen: mein Pfad ist etwas wie/mein/Pfad? Dann = einige & Abfrage = Strings. Beachten Sie, dass es keine Erweiterung hat (z. B. gif, png, jpeg), aber der MIME-Typ ist richtig eingestellt (image/gif, image/png, image/jpeg). Ich bin nicht sicher, ob die fehlende Erweiterung oder das Vorhandensein der Abfragezeichenfolgen Auswirkungen haben. (Auch eine andere Anmerkung. Obwohl meine URL Abfragezeichenfolgen haben, benutze ich die gleiche uri + Abfragezeichenfolge immer und immer wieder mit meinen Tests).

Irgendwelche Ideen warum?

Dank

Antwort

1

Sie möchten in Ihrer Anfrage insbesondere nach einem beliebigen Cache-Control-Header suchen. Wenn eine Anfrage etwas wie Cache-Control sagt: no-cache oder Cache-Control: max-age = 0, dann können Caches keine zwischengespeicherte Kopie bereitstellen. Oder wenn die Antwort eine Expires-Kopfzeile hat, die zeitlich zu nahe ist, kann sie nicht lange zwischengespeichert werden.

Die vollständige Liste der Header und Erläuterungen ist in der HTTP 1.1-Spezifikation. Siehe Caching in HTTP (13) und Header Field Definitions (14)

Die Firebug plug-in ist eine gute Möglichkeit, Anfrage und Antwortheader mit Firefox zu überprüfen.

Achten Sie auch darauf, wie Sie Firefox verwenden. Wenn Sie auf die Schaltfläche "Aktualisieren" klicken, entspricht dies der Anweisung "Cache-Steuerung: Kein Cache". Sie besagt, dass Sie die neueste Kopie benötigen, die Sie zurück zum ursprünglichen Webserver führt.

+0

Danke, Momentan setze ich das Cache-Control und die Expires in den Antwortheadern. Soll ich das Cache-Control stattdessen in den Anforderungsheadern setzen? Re: firefox: Wdym? Ich teste nur mit dem 'Refresh Button' oder mit 'F5' und nicht mit Shift + RefreshButton oder Strg + F5. ... Willst du sagen, dass der RefreshButton von Firefox eine harte Aktualisierung ist? Danke, –

+0

@Franz: Wenn Ihre Antwort Header Caching für eine ausreichend lange Zeit zulassen, ist das korrekt. Die Header der Firefox-Anfragen können angezeigt werden, wenn Sie Firebug oder ein anderes Webentwicklungs-Plug-in verwenden. Diese Information sollte * wirklich * hilfreich sein. Die Semantik von F5 und Ctrl-F5 lautet: http://support.mozilla.com/tiki-view_forum_thread.php?style_mode=inproduct&locale=en-US&comments_parentId=333668&forumId=1 Geben Sie auch Ihre URL ein und geben Sie eine andere URL ein. Geben Sie dann Ihre erste URL erneut ein und vermeiden Sie die Schaltflächen zum Aktualisieren und Zurück/Weiterblättern. –

1

ich die HTTP-Anforderung gesendet untersuchen würde - vor allem des HTTP-Header wird für die Bildanforderung gesendet. Sie können Firefox plugin verwenden und/oder die Header am Ende des Servlets überprüfen (im HttpServletRequest Objekt)

+0

Worauf sollte ich achten? Gibt es irgendwelche Probleme? –

+0

HttpFox (https://addons.mozilla.org/en-US/firefox/addon/6647) kann noch besser zum Anzeigen von Kopfzeilen sein. Schauen Sie nach, was sich zwischen dem URL-Typ-In, der funktioniert, und dem IMG-SRC-Abruf, der nicht funktioniert, unterscheidet. Etwas, auf das Sie achten sollten: Wenn Sie 'neu laden' wählen, betrachtet Firefox die Anforderung, die lokale Kopie erneut zu überprüfen, mit mindestens einer 'if-modified-since'-Anfrage, die Ihr Servlet nur als neues get behandelt. Außerdem: Sie können Browser-Cache-Einträge mit abgelaufenen Zeiten mit 'about: cache' in der Adressleiste anzeigen. – gojomo

+0

Ich würde alle Header überprüfen, um sicherzustellen, dass sie das sind, was Sie erwarten. Ich weiß nicht, wie Ihre Zwischenspeicherungsschicht funktioniert und wie sie bestimmt, ob eine Anforderung für etwas Neues oder für eine zuvor angeforderte Entität gilt. –

Verwandte Themen