Cloudflare: URL'de Sorgu Dizesi olduğunda statik HTML'yi önbelleğe alma


10

Quick CloudFlare sizin için 'yeni kullanıcı' sorusu:

ARKA PLAN: Orijin sunucum tarafından sunulan HTML sayfaları hiçbir zaman değişmez. Tüm dinamik içerik, sayfa kullanıcının tarayıcısına yüklendikten sonra JavaScript aracılığıyla indirilir. JavaScript tarafından türetilen dinamik içerik kısmen URL'nin sorgu dizesine bağlıdır, ancak sorgu dizesinin kendisinin orijinal olarak indirilen HTML içeriğini etkilemez. Bu nedenle aşağıdaki URL'lerin tümü , tarayıcıda JavaScript tarafından kullanılmadan önce orijinalinden tam olarak aynı HTML'yi oluşturur :

https://www.example.com/private/my-investments?portfolioID=296

https://www.example.com/private/my-investments?portfolioID=325

https://www.example.com/private/my-investments?portfolioID=319

SORU: CloudFlare yapar önbelleğe HTML varsayılan olarak göz önüne alındığında, tek bir önbelleğe alınmış kopya böylece benim Sayfa Kurallar, inşa ettirir nasıl https://www.example.com/private/my-investments?[anyValue] tüm kullanıcılara döndürülür ? İşte denedim:

"HER ŞEY ÖNLEYİN:" 'Her Şeyi Önbellek' direktifini kullanmak HTML kodumun önbelleğe alınmasına (iyi) neden olur, ancak önbellek anahtarının bir parçası olarak tüm sorgu dizesini kullanır (kötü). Dolayısıyla, bir kullanıcı aşağıdaki URL'ye ulaşırsa ...

https://www.example.com/private/my-investments?portfolioID=296

... ve on saniye sonra aynı URL'yi farklı bir sorgu dizesiyle vurur, örneğin:

https://www.example.com/private/my-investments?portfolioID=325

... CloudFlare, bu isteği bir önbellek MISS (cf-cache-status: MISS) olarak ele alır ve kaynak sunucuma tekrar vurur. Bu, başlangıç ​​noktasından döndürülen HTML'nin her iki URL için de aynı olmasına rağmen.

"IGNORE QUERY STRING CACHING:" Kesinlikle "IGNORE QUERY STRING CACHING" seçeneğini seçerek bu sorunu çözeceğimi düşündüm. Ancak bu seçeneği Sayfa Kuralı'nda kullanırken, hiçbir HTML önbelleğe alınmaz; Yalnızca .js, .css ve .png dosyaları önbelleğe alınır. Ve bir kez daha kökenim HTML verileri için yapılan her bir çağrı için vurulur. :(

Bariz bir şeyi kaçırmam gerektiğini hissediyorum. Düşüncesi olan var mı?

GÜNCELLEME : Sizin yürütmek istediğim bir fikrim vardı. Dahili URL düzenimi 'yerine' # 'kullanmak üzere değiştirerek bu sorunu çözebilir miyim? Yani şöyle bir URL yerine ...

https://www.example.com/private/my-investments?portfolioID=296

.. Gibi bir şey kullanırdım:

https://www.example.com/private/my-investments#portfolioID=296

Bu, sorgu dizesi parametrelerinin CloudFlare'ye hiç iletilmesini engelleyecektir ... Ne düşünüyorsunuz?

Festus


"?" Yerine "#" kullanılıyor URL'de sorunu çözdü. Sysops devam edip sorumu silebilir.
Festus Martingale

4
Diğerleri burada anladığınız şeylerden öğrenebilirler, bu yüzden yukarıda yaptıklarınızı bir cevap olarak (biraz özenle) sağlayabilir ve mümkün olduğunda kabul edebilirsiniz. Teşekkürler.
dan

Yanıtlar:


4

(Soruyu yanıtlandığı şekilde işaretlemek için @Festus Martingale için yanıt eklendi).

Değiştirme ?bir ile #bir karma fragmanı olarak göründüğü gibi CloudFlare iletilmesi sorgu dizisi engeller olarak sorun çözüldü.


Benim adım Festus. Bunu bir cevap olarak işaretledim.
Festus Martingale
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.