Preflight kann nur auf die Anforderung angewendet werden, nicht auf die gesamte Domain. Ich habe dieselbe Frage auf die Mailingliste gesetzt, und es gab Sicherheitsbedenken. Hier ist der gesamte Thread: http://lists.w3.org/Archives/Public/public-webapps/2012AprJun/0228.html
Es gibt einige Dinge zu beachten, wenn Sie die Anzahl der Preflight-Anfragen begrenzen möchten. Beachten Sie zunächst, dass WebKit / Blink-basierte Browser einen maximalen Preflight-Cache von 10 Minuten festlegen:
https://github.com/WebKit/webkit/blob/master/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp
https://chromium.googlesource.com/chromium/blink/+/master/Source/core/loader/CrossOriginPreflightR .cpp
(Ich bin nicht sicher, ob dies für andere Browser gilt). Während Sie also immer den Header Access-Control-Max-Age festlegen sollten, beträgt der Maximalwert 10 Minuten.
Nächster Hinweis: Es ist unmöglich, einen Preflight bei PUT / DELETE-Anforderungen zu vermeiden. Für Aktualisierungen / Löschungen Ihrer API ist daher mindestens alle 10 Minuten ein Preflight erforderlich.
Vermeiden Sie bei GET / POST nach Möglichkeit benutzerdefinierte Header, da diese weiterhin Preflights auslösen. Wenn Ihre API JSON zurückgibt, beachten Sie, dass ein Inhaltstyp von 'application / json' auch einen Preflight auslöst.
Wenn Sie bereit sind, zu verbiegen, wie "RESTful" Ihre API ist, können Sie noch einige weitere Dinge ausprobieren. Eine Möglichkeit besteht darin, einen Inhaltstyp zu verwenden, für den kein Preflight erforderlich ist, z. B. "Text / Plain". Benutzerdefinierte Header lösen immer Preflights aus. Wenn Sie also benutzerdefinierte Header haben, können Sie diese in Abfrageparameter verschieben. Am äußersten Ende könnten Sie ein Protokoll wie JSON-RPC verwenden, bei dem alle Anforderungen an einen einzelnen Endpunkt gestellt werden.
Ehrlich gesagt ist der Preflight-Cache aufgrund des Preflight-Cache-Limits des Browsers von 10 Minuten und der REST-Ressourcen-URLs ziemlich nutzlos. Es gibt sehr wenig, was Sie tun können, um Preflights im Verlauf einer lang laufenden App einzuschränken. Ich bin zuversichtlich, dass die Autoren der CORS-Spezifikation versuchen werden, dies in Zukunft zu beheben.