In meiner Anwendung führt das Frontend (ReactJS unter Verwendung von Axios, falls das wichtig ist) einige API-Aufrufe an das Backend aus (Node/Express, falls das wichtig ist). In allen Antworten reagiert der Server mit Access-Control-Allow-Origin:*
(Dies ist eine Testumgebung, entsprechende Änderungen werden vorgenommen, um bestimmte Ursprünge in der Produktion zuzulassen).Zu viele OPTIONS-Anfragen
im Entwickler-Tools Netzwerk-Registerkarte Chrome beobachte ich für jede Anforderung, dass POST /assets
sagen, POST /filters
, PUT /media
usw., eine Anfrage Preflight OPTIONS gesendet wird. Jetzt verstehe ich from here, der Grund für diese und das ist in Ordnung.
OPTIONS-Request-Header
OPTIONS /api/v1/content/bb54fbf52909f78e015f/f91659797e93cba7ae9b/asset/all
HTTP/1.1
Host: XX.X.XX.XXX:5000
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Access-Control-Request-Headers: authorization,content-type
Accept: */*
DNT: 1
Referer: http://localhost:3000/main/93f1ced0f15f35024402/assets
Accept-Encoding: gzip, deflate
Accept-Language: en,en-US;q=0.8,mr;q=0.6
Antwortheader
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE
Vary: Access-Control-Request-Headers
Access-Control-Allow-Headers: authorization,content-type
Date: Sat, 05 Aug 2017 10:09:16 GMT
Connection: keep-alive
Meine Beobachtung ist, dass diese alle Anforderungen für buchstäblich gesendet wird, und wiederholt das heißt, selbst wenn die gleiche Anforderung gestellt wird wieder (sofort oder nicht).
Meine Fragen sind
Ist dies unbedingt eine schlechte Sache (das heißt würde es keine Performance-Probleme verursachen, auch kleinere)?
Warum erinnert sich der Browser nicht an die Headerantworten für denselben Server, dieselbe Anfrage?
Gibt es irgendetwas, das ich am Frontend oder Backend konfigurieren muss, um dieses Sticky zu erstellen?
Danke, das perfekt funktioniert. Ich habe jedoch eine Follow-up-Frage. Wie in der Dokumentation angegeben, die Sie verknüpft haben, gibt es eine Zeitüberschreitung für diese Einstellung, die für die Browser unterschiedlich ist, d. H. 24 Stunden für FF und 10 Minuten für Chrome. Irgendeine Begründung dafür? Ich verstehe, dass wir nicht möchten, dass die Einstellungen für unbestimmte Zeit zwischengespeichert werden, sondern was das Risiko birgt, dass diese für etwa 2 Stunden oder 4 Stunden geöffnet werden usw. Auch eine weitere Frage, die in den Dokumenten nicht klar ist, macht diesen Cache pro einzigartige Anfrage ausarbeiten oder ist generisch. Ich meine, wenn Server Header für Say/Media-Ressource sendet, würde es für/Benutzer berücksichtigt werden? –
@SubhashDike Re. Timeout: Da sie zwischen Fx und Chrome so unterschiedlich sind, denke ich, dass dies nur ein willkürlicher Cutoff ist, den die Hersteller als einen guten Kompromiss zwischen Vorsicht und Performance betrachten. Die [W3C CORS-Spezifikation] (https://www.w3.org/TR/cors/) sagt nur: "Gegenstände können nicht [...] für unangemessene Zeit bleiben". –
@SubhashDike Re. Granularität: Gemäß der [W3C CORS-Spezifikation] (https://www.w3.org/TR/cors/) ist es per-URL. Aber ich bin mir nicht sicher, ob die Browser dieser Spezifikation wirklich folgen, da sie im Allgemeinen eine lauwarme Beziehung zu W3C haben. –