2016-04-18 12 views
2

Von meinem Client aus frage ich einige Enums vom Server. Jetzt möchte ich diese Enums im Client zwischenspeichern, sobald sie einmal auf dem Server abgefragt wurden.Http-Cache im Frühjahr starten Boot

Ich versuchte Cache-Control wie folgt festzulegen:

@CrossOrigin 
@RequestMapping(value = "enums/{name}", method = RequestMethod.GET) 
public List<String> getEnums(@PathVariable("name") String name, final HttpServletResponse response) { 
    response.setHeader("Cache-Control", "max-age=3600"); 
    return myservice.findAllEnums(name); 
} 

Die Antwort-Header scheint richtig mit Cache-control: max-age=3600 eingestellt werden. Ich habe auch alle HTTP-Header in meiner Sicherheitskonfiguration wie folgt deaktiviert:

@Override 
protected void configure(final HttpSecurity http) throws Exception {  
http.headers().cacheControl().disable(); 
} 

Leider ist die Antwort nicht im Browser zwischengespeichert. Sobald ich die Ressource abfrage, geht die Abfrage erneut zum Server.

Inzwischen habe ich Spring Security komplett entfernt, aber es funktioniert immer noch nicht. Was habe ich nicht richtig verstanden? Was muss ich noch konfigurieren?

Antwort

1

Ok, mir ist aufgefallen, dass es mit IE funktioniert, aber nicht mit Chrome. Das Problem mit Chrome ist, dass es Cache-control: max-age=0 im Header der Anfrage setzt, wenn Sie die Seite erneut aufrufen. Dies verhindert offensichtlich, dass die Daten zwischengespeichert werden. Ich habe dann einen einfachen HTML-Code erstellt, indem ich einen Hyperlink zu meiner Anwendung verwendet habe und ihn über diesen Link wieder aufgerufen habe. Somit funktionierte der Cache wie erwartet.

0

Sie müssen überprüfen, ob eine Einschränkung vorgenommen wurde, da No-Cache-HTTP-Header von Spring Security festgelegt werden. können Sie hier relevantere Informationen erhalten: How to enable HTTP response caching in Spring Boot

+0

Inzwischen wechselte ich compeltly Spring Security aus, aber es funktioniert immer noch nicht. –