Gewusst wie: hinzufügen der Cache-Control-header für statische Ressourcen in den Frühling Starten?
Wie kann ich Cache-Control
HTTP-header in Spring Boot für statische Ressourcen?
Versucht, mit einer filter-Komponente in die Anwendung, die den Header schreibt, richtig, aber Cache-Control
header überschrieben wird.
@Component
public class CacheBustingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse) resp;
httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
httpResp.setHeader("This-Header-Is-Set", "no-cache, no-store, must-revalidate");
httpResp.setHeader("Expires", "0");
chain.doFilter(req, resp);
}
Was bekomme ich im browser ist:
Cache-Control:no-store
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0
Was ich möchte ist:
Cache-Control:no-cache, no-store, must-revalidate
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0
InformationsquelleAutor der Frage MatteKarla | 2015-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als pro die Dokumentationder
ResourceHandlerRegistry
. Es ist ziemlich einfach. (Ich habe keinen code Bezug auf Sie jetzt.)In dem Ort, wo Sie konfigurieren Ihre statische Ressourcen hinzufügen
addResourceHandler
Methode, Es zurückResourceHandlerRegistration
Objekt.Dort können Sie setCacheControl Methode. Was Sie tun müssen ist, konfigurieren Sie und stellen ein CacheControl Objekt.
Diese ist seit dem Frühjahr 4.2sonst werden Sie es zu tun haben wie unten.
InformationsquelleAutor der Antwort Maleen Abewardana
Dies geschieht, weil der Frühling Sicherheit: es umschreibt alle cache-Header um das caching zu deaktivieren völlig aus.
Wir müssen also zwei Dinge tun:
In der aktuellen version von Spring Boot-wir können dieses Verhalten ändern, in der Anwendung.Eigenschaften config.
Deaktivieren spring security für einige Ressourcen:
Aktivieren Sie das senden von cache-Headern für statische Ressourcen:
Das ist alles. Jetzt Frühling wird, überprüfen Sie, ob Ihre statische Dateien geändert wurde, und kann senden intelligentere Antworten (Wenn-Modiffied-Da und andere) und schreiben Sie Ihre appcache auch.
Auch, wenn es Gründe gibt, nicht zu verwenden, content-basierte version für einige Ressourcen, die Sie verwenden können, Alternative FixedVersion Strategie und set-version explizit in deiner config:
Sehen Sie mehr in docs
InformationsquelleAutor der Antwort Alexandr Latushkin
Maleenc, Antwort richtig ist. Allerdings gibt es ein Problem mit dieser Implementierung.
Dem folgenden code wird der korrekte cache-control-header auf die erste Anfrage, aber keine Zukunft-Anfrage zurückgibt, 304 (not-Modified) wird wieder die default-cache-control-header set von spring security.
{code}
Ich angesprochen haben, bis dieser Ausgabe den Frühling-team, siehe https://jira.spring.io/browse/SPR-15133. Hier gab es Antwort: "Jetzt sollte man nicht deaktivieren Sicherheits-cache-control-Header für Ihre ganze Anwendung ist in der Tat; die richtige Art und Weise zu deaktivieren diejenigen, die für einen bestimmten Pfad (Ressource-handling, hier) wird dadurch erklärt, dass Ausgabe Kommentar finden Sie in der "Abhilfe" Abschnitt".
InformationsquelleAutor der Antwort Thomas Jahncke
Mit spring-boot 1.3.3 hatte ich eine 404-Antwort, die die Verwendung maleenc Antwort.
Ich konnte es beheben, indem Sie hinzufügen einer Ressource location:
InformationsquelleAutor der Antwort Ronan Fauglas
Das sind Eigenschaften, die Steuern, die Standard-cache-Header für Ressourcen:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
InformationsquelleAutor der Antwort Mateusz Stefek