Cloudflare: buforuj statyczny kod HTML, gdy adres URL zawiera ciąg zapytania

10

Szybkie pytanie dla nowego użytkownika CloudFlare:

TŁO: Strony HTML obsługiwane przez mój serwer pochodzenia nigdy się nie zmieniają. Cała zawartość dynamiczna jest pobierana przez JavaScript po załadowaniu strony w przeglądarce użytkownika. Dynamiczna treść pochodząca z JavaScript zależy częściowo od ciągu zapytania adresu URL, ale sam ciąg zapytania nie ma wpływu na pierwotnie pobraną treść HTML. Dlatego poniższe adresy URL generują dokładnie ten sam kod HTML z miejsca początkowego przed uruchomieniem przez JavaScript w przeglądarce:

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

PYTANIE: Biorąc pod uwagę, że CloudFlare domyślnie nie buforuje HTML, jak mam skonstruować moje reguły strony, aby pojedyncza kopia https://www.example.com/private/my-investments?[anyValue] została zwrócona wszystkim użytkownikom ? Oto, co próbowałem:

„PRZECHOWYWAJ WSZYSTKO:” Użycie dyrektywy „Cache Everything” powoduje, że mój HTML jest buforowany (dobrze), ale używa całego ciągu zapytania jako części klucza pamięci podręcznej (źle). Więc jeśli użytkownik kliknie następujący adres URL ...

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

... a następnie dziesięć sekund później trafia na ten sam adres URL z innym ciągiem zapytania, na przykład:

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

... CloudFlare traktuje to ostatnie żądanie jako pamięć podręczną MISS (cf-cache-status: MISS) i ponownie uderza mój serwer źródłowy. Dzieje się tak pomimo faktu, że HTML zwrócony z pochodzenia jest identyczny dla obu adresów URL.

„IGNORE QUERY STRING CACHING:” Pomyślałem, że na pewno rozwiążę ten problem, wybierając opcję „IGNORE QUERY STRING CACHING”. Ale podczas korzystania z tej opcji w Regule strony żaden HTML nie jest buforowany; Buforowane są tylko pliki .js, .css i .png. I po raz kolejny moje pochodzenie trafia w każde wywołanie danych HTML. :(

Czuję, że brakuje mi czegoś oczywistego. jakieś pomysły?

AKTUALIZACJA : Miałem pomysł, który chcę uruchomić. Czy mogę rozwiązać ten problem, zmieniając wewnętrzny schemat URL na „#” zamiast „?” Zamiast adresu URL takiego jak ...

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

.. użyłbym czegoś takiego:

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

Zapobiegałoby to w ogóle przesłaniu parametrów ciągu zapytania do CloudFlare ... Co sądzisz?

Festus

Festus Martingale
źródło
Używanie „#” zamiast „?” w adresie URL rozwiązał problem. Sysops może iść naprzód i usunąć moje pytanie.
Festus Martingale,
4
Inni mogą uczyć się na podstawie tego, co tutaj wymyśliliście, więc może możecie podać to, co zrobiliście powyżej, jako odpowiedź (z niewielkim rozwinięciem) i zaakceptować, kiedy będzie to możliwe. Dzięki.
dan

Odpowiedzi:

4

(Dodano odpowiedź dla @Festus Martingale, aby oznaczyć pytanie jako odpowiedź).

Wymiana ?z #rozwiązać ten problem, ponieważ zapobiega ciągu zapytania przesyłane do cloudflare zamieszczony jako fragment mieszania.

Chris Rutherfurd
źródło
Mam na imię Festus. Oznacziłem to jako odpowiedź.
Festus Martingale