35 puan yazan xguru 2022-09-22 | 2 yorum | WhatsApp'ta paylaş

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

 
nicewook 2022-09-23

Tam bu kısma bakıyordum; keyifle okudum.

 
kofmania 2022-09-22

Performans tam tersine -> performans yarıya