CORS preflight nedir?
- Karmaşık bir istek göndermeden önce, yetki olup olmadığını önce
OPTIONS ile sormaktır
- Ancak pratikte çoğu istek buna ihtiyaç duyar (JSON/XML gövdesi olması, kimlik bilgilerinin dahil edilmesi vb.)
- Bunun kötü yanı, gerçek isteğin tamamlanma süresini uzatmasıdır
OPTIONS istekleri varsayılan olarak önbelleğe alınamaz; bu yüzden CDN'ler de genellikle bunları işlemez ve istek sunucuya kadar ulaşır
- Bu değerler istemci tarafında önbelleğe alınır ve varsayılan olarak yalnızca 5 saniye tutulur
- Yani bir web sayfası API polling işlemini her 10 saniyede bir yapıyorsa, preflight da her 10 saniyede bir gerçekleşir
- Çoğu durumda tarayıcı istemcisinin API gecikmesini artırır; kullanıcı açısından performans yarıya inmiş gibi olur
- Ayrıca API sunucusuna gereksiz yük bindirir ve maliyeti artırır
- Özellikle de serverless kullanıyorsanız daha da önemlidir. Lambda, Netlify Functions, Cloudflare Workers, Google Cloud Functions'ın hepsi fonksiyon çağrısı başına ücret alır; bu preflight da buna dahildir
preflight yanıtlarını önbelleğe alma yöntemi
- Tarayıcıda önbelleğe alarak, gereksiz aynı preflight isteklerinin gönderilmesini engellemek
- CDN katmanında önbelleğe alarak, bu isteklere gerçek backend sunucusunun işlem yapmasına gerek kalmadan yanıt verilmesini sağlamak
Tarayıcılar için CORS caching
- preflight yanıtına şu header'ı ekleyin:
Access-Control-Max-Age: 86400
- Firefox'ta 86400'e (24 saat) kadar mümkünken, Chromium tabanlı tarayıcılarda en yüksek değer 7200'dür (2 saat)
CDN'ler için CORS caching
- CDN veya proxy üzerinde önbelleğe almak için şu header'ları ekleyin
Cache-Control: public, max-age=86400
Vary: origin
- Buradaki kritik nokta,
OPTIONS'ın varsayılan olarak önbelleğe alınacak şekilde tanımlanmamış olmasıdır; yani standart değildir. Ancak çoğu CDN bunu destekler
Configuration örnekleri
- AWS Lambda ile CORS önbelleğe alma
- Node.js içinde CORS önbelleğe alma
- Python içinde CORS önbelleğe alma
- Java Spring ile CORS önbelleğe alma
2 yorum
Tam bu kısma bakıyordum; keyifle okudum.
Performans tam tersine -> performans yarıya