deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

vite-ssr-boost artık SSR render hattı çalışmadan önce /.env tarzı isteklere 404 döndürüyor

vite-ssr-boost'un son sürümü, varsayılan olarak etkinleştirilen bir document guard ile /.env gibi probe yollarına, SSR request hook'u veya render hattı devreye girmeden düz 404 döndürüyor. Yanına opsiyonel bir SSR eşzamanlılık sınırı da ekleniyor.

vite-ssr-boost artık SSR render hattı çalışmadan önce /.env tarzı isteklere 404 döndürüyor

Önce çalışan bir koruma

vite-ssr-boost'un son sürümü, varsayılan olarak etkinleştirilmiş bir document guard ile geliyor ve görevi basit: gelen bir isteğin React ağacı hak edip etmediğine karar vermek. Sürümü duyuran dev.to yazısına göre, /.env veya /random.php için yapılan bir GET artık hiçbir şey render etmeden düz bir 404 döndürüyor; çünkü bunlar gerçek bir ziyaretçinin isteyeceği sayfalar değil, tarayıcıların (scanner) yaygın olarak yokladığı yollar.

Koruma, framework'ün onRequest hook'undan, HTML yüklenmeden ve route loader'lar çalışmadan önce devreye giriyor. Varsayılan GET, HEAD ve POST kümesinin dışındaki method'larla yapılan istekler aynı erken aşamada Allow header'ı içeren bir 405 alıyor. İzin verilen method'lar için, fazla büyük hedefler 414, bozuk yollar ise 400 alıyor. /missing.xml gibi eşleşmeyen yollar da reddediliyor; ancak /sitemap.xml gibi eşleşen bir kaynak rotası hâlâ geçebilir.

Yazının vurguladığı bir uyarı var: request hook'unuz CORS preflight'lerini işliyorsa, OPTIONS'ı requestGuard.methods dizisine eklemediğiniz sürece bu OPTIONS istekleri artık geri çevrilecek; bu dizinin kullanımı varsayılanların yerini alıyor. requestGuard: false ayarı, korumayı ve eksik sayfa işlemeyi tamamen devre dışı bırakıyor; yazarlar bunun document-handler davranışı olduğunu — sunucunuza ulaşan her isteği kapsamadığını — belirtiyor.

Eksik bir sayfanın ne yapacağını yapılandırmak

/missing gibi eşleşmeyen bir doküman için yeni notFound seçeneği çeşitli modlar sunuyor. Varsayılan olan render, mevcut router ve render yolunu koruyor. spa, 404 status'üyle bir client shell sunuyor; varsayılan bot politikası altında tespit edilen botlar ise yine render yolunu izliyor. Özel bir Response, render hattını hiç tetiklemeden statik bir 404 üretiyor.

Bir catch-all rotası eşleşme sayılır; bu tür bir rotanın içinde eksik sayfa modunu uygulamak için requestGuard.decide'dan 'notFound' döndürürsünüz.

Ayrıca bir cached modu var; bu mod bir router 404'ünü buffer'lar ve entry tutulduğu sürece yeniden kullanır. Aynı anahtar için eşzamanlı miss'ler tek bir render'ı paylaşır ve sonraki hit'ler onRequest'u ve loader'lar dahil tüm render hattını atlar. Varsayılan anahtar tüm eksik yollar arasında paylaşılır ve ilk render edilen URL'yi ile hydration verisini içerir; soğuk render'lar orijinal body olmadan GET kullanır, Cookie ve Authorization istek hook'undan önce çıkarılır. Yazı, URL'nin, diğer header'ların ve uygulama durumunun çıktıyı hâlâ etkileyebileceği uyarısını yapıyor; bu yüzden özel (private) durumun paylaşılan HTML'de bulunmaması gerekir ve oturuma bağlı sayfalar sıradan render'da kalmalıdır. Yapılandırılmış bir CSP nonce'u cache'i devre dışı bırakıp render'a geri döner; başarısız render'lar ve 404 olmayan sonuçlar ise asla tutulmaz. Cache'lenen doküman varsayılan olarak private, no-store header'ı taşır ve bu cache, tarayıcı veya CDN cache'lemesinden ayrıdır.

Opsiyonel render admission

İkinci öne çıkan özellik olan SSR eşzamanlılık sınırı varsayılan olarak kapalı. admission.maxConcurrency'a pozitif bir safe integer atamak — ya da öncelik alan ve handler ya da entry oluşturulurken okunan SSR_MAX_CONCURRENCY değerini sağlamak — bunu etkinleştirir. Yazı bunu cluster genelinde değil, handler'a yerel bir sınır olarak tanımlıyor.

Slot, SSR/SPA kararından sonra ama route loader'lar çalışmadan önce alınır. Kapasite dolduğunda varsayılan yanım, Retry-After ve private, no-store header'larıyla 503'tür; bir kuyruk yoktur. onRequest ve HTML yüklemesi o noktaya kadar çoktan gerçekleşmiş olduğundan, bu hook'lar reddedilen isteklerde bile çalışır.

admission.overload 'spa' olarak ayarlandığında, tam bir admission controller insanlara 200'lük bir shell, tespit edilen botlara ise 503 döner — bunu, shell'ini 404 ile sunan eksik sayfa SPA moduyla karıştırmamak gerekir. Özel bir overload Response her zaman 503 olarak gönderilir. Stream edilen yanıtlarda slot, yalnızca React bir shell üretene kadar değil, son Fetch response stream'i tüketilene kadar dolu kalır; abort, hata, redirect ve body'siz yanıtların kendi release yolları vardır. Sıradan SPA shell'leri ve cache'lenmiş 404 hit'leri asla slot işgal etmez.

Neden önemli

Otomatik tarayıcılar /.env, başıboş PHP dosyaları ve benzeri yolları sürekli yoklar ve geleneksel bir SSR kurulumunda bu isteklerin her biri tam bir render tetikleyebilir — boşa harcanan CPU ve bellek, üstelik asla ilgilenilmemesi gereken bir istek için uygulama kodunun çalışması. Bu istekleri herhangi bir hook veya loader çalışmadan önce reddetmek ucuz bir savunma katmanıdır ve bunu varsayılan yapmak bir framework için mantıklı bir karardır. Ödün davranışsal olarak: onRequest'un her zaman tetiklendiğini varsunan kodun — CORS preflight'leri, auth veya logging için — yeniden gözden geçirilmesi gerekir; yazı, hook'unuza ulaşması gereken bir preflight'i açıkça test etmenizi öneriyor. Opsiyonel 404 cache'i ve eşzamanlılık admission'ı, paylaşılan cache'lenmiş sayfalar asla özel veri içermediği sürece, sürümü probe trafiğine ve ani yük artışlarına karşı pratik bir koruma olarak tamamlıyor.

  • #vite
  • #vite-ssr-boost
  • #ssr
  • #web-security
  • #react

İlgili yazılar