Was ist ein CORS-Preflight?
- Bevor eine komplexe Anfrage gesendet wird, wird zunächst per
OPTIONS angefragt, ob die Berechtigung dafür besteht
- In der Praxis benötigen das jedoch die meisten Anfragen tatsächlich (z. B. mit JSON-/XML-Body oder mit Credentials usw.)
- Problematisch ist das, weil sich dadurch die Zeit bis zur eigentlichen Anfrage erhöht
OPTIONS-Requests sind standardmäßig nicht cachebar, und auch CDNs verarbeiten sie daher meist nicht im Cache, sodass die Anfrage bis zum Server durchgereicht wird
- Diese Werte werden auf Client-Seite gecacht und standardmäßig nur 5 Sekunden lang behalten
- Wenn also eine Webseite alle 10 Sekunden die API pollt, wird auch alle 10 Sekunden einmal ein Preflight ausgeführt
- In vielen Fällen erhöht das die API-Latenz im Browser-Client, sodass sich die wahrgenommene Performance für Nutzer halbiert
- Außerdem belastet es den API-Server unnötig und erhöht die Kosten
- Besonders dann, wenn man Serverless nutzt. Lambda, Netlify Functions, Cloudflare Workers und Google Cloud Functions berechnen alle pro Funktionsaufruf – und dieser Preflight zählt ebenfalls dazu
Wie man Preflight-Antworten cached
- Im Browser cachen, damit keine unnötigen identischen Preflight-Requests gesendet werden
- Auf CDN-Ebene cachen, damit diese Requests beantwortet werden können, ohne dass der eigentliche Backend-Server sie verarbeiten muss
CORS-Caching für Browser
- Dem Preflight-Response folgenden Header hinzufügen:
Access-Control-Max-Age: 86400
- Firefox erlaubt bis zu 86400 (24 Stunden), Chromium-basierte Browser haben jedoch 7200 (2 Stunden) als Maximalwert
CORS-Caching für CDNs
- Um im CDN oder Proxy zu cachen, folgende Header hinzufügen
Cache-Control: public, max-age=86400
Vary: origin
- Wichtig ist:
OPTIONS ist standardmäßig nicht cachebar, daher ist das nicht Teil des Standards. Die meisten CDNs unterstützen es jedoch
Konfigurationsbeispiele
- Caching CORS with AWS Lambda
- Caching CORS in Node.js
- Caching CORS in Python
- Caching CORS with Java Spring
2 Kommentare
Ich habe mir gerade diesen Teil angesehen und fand ihn interessant.
Von einer Leistungssteigerung ins Gegenteil -> auf die halbe Leistung