Ich serviere Bilder von meinem Servlet. Der Inhaltstyp der Antwort ist image / jpeg. Ich finde, dass Bilder, die von meinem Servlet angefordert werden, nicht zwischengespeichert werden. Wie bekomme ich sie im Cache, wie Dateiabbild-Anforderungen normalerweise sind? Ich habe versucht, Cache-Control zu setzen: öffentlich, aber ohne Erfolg.
Das Standard-Servlet, das statischen Inhalt in Containern wie Tomcat bereitstellt, setzt keine Cache-Steuerkopfzeilen. Sie müssen dafür kein Servlet schreiben. Erstellen Sie einfach einen Filter wie diesen,
%Vor%Wenn Sie die Cache-Steuerung hinzufügen möchten, fügen Sie den Filter einfach zu den Ressourcen in web.xml hinzu. Zum Beispiel
%Vor% Sie müssen die ETag
, Last-Modified
und Expires
Header entlang der Antwort. Der ETag
stellt den eindeutigen Bezeichner der Datei dar (normalerweise basierend auf einer Kombination aus Dateiname, Dateigröße und zuletzt geändertem Zeitstempel). Der Last-Modified
stellt den letzten modifizierten Zeitstempel der Datei dar. Der Header Expires
gibt an, wie lange der Client die Datei im Cache behalten darf. Wenn der Cache abgelaufen ist und die ETag
oder Last-Modified
verfügbar sind, sendet der Client eine Anfrage HEAD
, um zu überprüfen, ob die Datei erneuert werden muss. Wenn nicht, dann wird das Expires
einfach wieder entsprechend verschoben.
Hier finden Sie ein Servlet-Beispiel, das all dies handhabt (und Download-Fortsetzungen und automatisches GZIP): FileServlet unterstützt Lebenslauf und GZIP
Zum Beispiel, wenn Sie sie für 1 Monat zwischenspeichern möchten:
%Vor% (dies ist in Filter
, die zum Beispiel das Muster *.jpg
behandelt)
Aber Bilder sollten standardmäßig zwischengespeichert werden - überprüfen Sie Ihre Filter und Konfigurationen, um zu sehen, ob etwas die Cache-Parameter nicht falsch setzt.