2016-07-29 7 views
0

Ich habe eine API zur Cache-Steuerung. Der Server wird den Antwortheader "zuletzt geändert" setzen und die nächste Anfrage vom Browser wird den Header If-modified-Since haben.Ajax 304 nicht geändert kann keine Antwort empfangen

Wenn ich jedoch Ajax verwenden, um API anzufordern, wird If-modified-Since-Header nicht automatisch gesetzt. Und ich habe If-modified-Since im Ajax-Anfrage-Header, Server-Antwort 304 Statuscode. Aber Antwortkörper ist leer.

Muss Ajax das Verhalten des Browsers zur Cache-Steuerung manuell erfüllen?

Gibt es eine bessere Lösung?

Ich finde eine ähnliche Frage here.

Antwort

0

es schließlich aufgelöst, nachdem ich this studieren.

Festlegen der Anfrage-Header

'Cache-Control': 'max-age=0' 

Wenn Antwort Last-Modified-Header zur Verfügung stellt, wird nächste Anfrage automatisch If-Modified-Since und Wert gleich ist.

Wenn eine 304-Antwort auftritt, stammt der Antwortinhalt vom Browser-Cache.

0

Der Antworttext sollte für eine 304 Antwort leer sein, so soll es funktionieren. The protocol Staaten:

Die 304 Antwort keine Nachricht Körper enthalten, und somit immer durch die erste leere Zeile nach den Header-Felder beendet.

Also, wenn Sie die Anfrage mit dem If-modified-since und die Bedingung senden nicht erfüllt ist, werden Sie keine Antwort Körper (die eigentlichen Daten) erhalten. Sie geben im Wesentlichen an, dass Sie den Inhalt haben und nur dann, wenn er aktualisiert wurde.

Versuchen Sie nicht, den If-Modified-Since Header verwenden und stattdessen die Cache-control Header:

$.ajax({ 
... 
headers: { 
    'Cache-Control': 'max-age=1000' 
} 
... 
}); 
+0

Ich muss If-Modified-Since-Header verwenden, um Daten zu überprüfen, die geändert werden oder nicht. Und wo ist übrigens eine andere Cache-Control von Anfrage und Antwort? – Jim