CORS-Access-Control-Max-Age wird ignoriert
Ich bin hosting eine WebApp und seine API auf verschiedenen domains und verwenden CORS arbeiten zu können, um die same-origin-policy. So weit, So gut. Dieser funktioniert.
Nur senden Sie eine CORS preflight einmal pro Sitzung, die ich den
Access-Control-Max-Age zu 20 Tage, Aber das wird nicht funktionieren (getestet in Chrome):
https://db.tt/vfIW3fD2
Was muss ich ändern?
InformationsquelleAutor Roland Schütz | 2014-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Chrome Dev Tools, stellen Sie sicher, dass "cache Deaktivieren (während DevTools geöffnet ist)" deaktiviert. Ich hatte Probleme mit dem "Access-Control-Max-Age" nicht geehrt, nur um zu realisieren, dass ich hatte diese option überprüft.
Freut mich zu hören 🙂
Dies ist so offensichtlich, aber.... Ich hätte nie drüber nachgedacht! Danke!
danke @NejKutcharian
Gerade festgestellt, es gibt so etwas in devtools, und es hat funktioniert, vielen Dank
InformationsquelleAutor Nej Kutcharian
Chrome/Blink schreibt eine max preflight-Zeit von 10 Minuten (600 Sekunden). Hier ist die Position im Quell-code, der definiert:
https://chromium.googlesource.com/chromium/blink/+/master/Source/core/loader/CrossOriginPreflightResultCache.cpp#40
Jede preflight-Zeit über 10 Minuten ignoriert werden, und 10 Minuten verwendet werden, statt.
Verschiedene Browser haben unterschiedliche max Alter Politik. Safari/WebKit-caches für bis zu 5 Minuten, während der Firefox-caches für bis zu 24 Stunden. Die Chrome-source-code zeigt an, dass der max-Wert existiert, um zu "minimieren Sie das Risiko mit einem vergifteten cache nach der Umstellung auf ein Sicheres Netzwerk".
Wenn Sie den code nicht analysieren, das max-age-header (oder der server nicht, geben Sie einen max-age-header), den browser standardmäßig auf 5 Sekunden.
Ich aktualisierte die Antwort mit einem Abschnitt über, wenn die 5-Sekunden-timeout gewählt wird. Aber in deinem speziellen Fall, der timeout sollte 5 Minuten und nicht 5 Sekunden, da Ihre max-age-header sieht gültig. Die einzige andere Sache, es könnte sein, was +Ray Nicholus erwähnt oben (den Header oder Herkunft nicht entsprechen). Können Sie neu erstellen, diese auf test-cors.org?
Ich kann nicht reproduzieren Sie das Problem mit test-cors.org da das problem tritt in der zweiten Anfrage. Hier meine Anfrage und die Antwort, die sollte (aber nicht) führen zu einer Cache-OPTIONEN anfordern. gist.github.com/rolandschuetz/cd278a9489b5065a256d
Nach 2 Jahren und chrome immer noch ignoriert cache :(... Getestet auf 54.0.2840.50 beta (64-bit)
InformationsquelleAutor monsur
Ich würde nicht verlassen sich zu stark auf preflight-caching.
Aus der spec:
Auch die folgenden im Auge behalten, (von der CORS-Spezifikation):
Deinem screenshot nicht bieten eine Möglichkeit, um zu bestimmen, ob einer der oben genannten sind wahr.
Kannst du vielleicht erklären Sie mir den letzten Punkt?
Die Anmeldeinformationen auslassen-flag wird gesetzt, wenn
withCredentials
auf das XHR-Instanz !== wahr. Die Anmeldeinformationen Feld Wert bezieht sich auf die Access-Control-Allow-Credentials-header, die möglicherweise oder möglicherweise nicht vorhanden in der server-Antwort. In anderen Worten, es klingt wie die preflight-cache wird nicht konsultiert werden, wenn eine sonst ähnliche preflight-Anfrage wurde gesendet und zwischengespeichert, aber die übereinstimmung in der preflight-cache hast, enthalten cookies aber keine Access-Control-Allow-Credentials=true in der Reaktion, oder nicht-cookies in die Anfrage, aber habe eine Access-Control-Allow-Credentials=true in der Antwort....nicht 100% sicher, dass mein Verständnis, aber ich habe nicht eine bessere interpretation. Vielleicht @monsur kann das widerlegen oder bestätigen mein Verständnis...
Ich glaube, ich verstehe das Konzept. Ich werde versuchen, ob das hilft. Dank
InformationsquelleAutor Ray Nicholus