Cloudflare: Cache HTML statis ketika URL memiliki String Kueri

10

Pertanyaan 'pengguna baru' CloudFlare cepat untuk Anda:

LATAR BELAKANG: Halaman HTML yang dilayani oleh server asal saya tidak pernah berubah. Semua konten dinamis diunduh melalui JavaScript setelah halaman dimuat di browser pengguna. Konten dinamis yang dihasilkan oleh JavaScript sebagian bergantung pada string kueri URL, tetapi string kueri itu sendiri tidak memengaruhi konten HTML yang awalnya diunduh. Karenanya, URL berikut semuanya menghasilkan HTML yang persis sama dari asalnya sebelum ditindaklanjuti oleh JavaScript di browser:

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

PERTANYAAN: Mengingat bahwa CloudFlare tidak men-cache HTML secara default, bagaimana saya membangun Aturan Halaman saya sehingga satu salinan cache https://www.example.com/private/my-investments?[anyValue] dikembalikan ke semua pengguna ? Inilah yang saya coba:

"CACHE EVERYTHING:" Menggunakan arahan 'Cache Everything' menyebabkan HTML saya di-cache (bagus) tetapi menggunakan seluruh string kueri sebagai bagian dari kunci cache (buruk). Jadi, jika pengguna mengklik URL berikut ...

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

... lalu sepuluh detik kemudian klik URL yang sama dengan string kueri yang berbeda, seperti:

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

... CloudFlare memperlakukan permintaan terakhir sebagai cache MISS (cf-cache-status: MISS) dan mengenai server asal saya lagi. Terlepas dari kenyataan bahwa HTML yang dikembalikan dari asal sama untuk kedua URL.

"MENGGABUNGKAN PENCARIAN STRING QUERY:" Saya pikir pasti saya akan memperbaiki masalah ini dengan memilih opsi "PENYALINAN STRING PENIPUAN STRING". Tetapi ketika menggunakan opsi ini dalam Aturan Halaman, tidak ada HTML yang di-cache sama sekali; Hanya file .js, .css, dan .png yang di-cache. Dan sekali lagi asal saya terkena untuk setiap panggilan tunggal untuk data HTML. :(

Saya merasa harus kehilangan sesuatu yang jelas. Adakah pikiran?

UPDATE : Punya ide saya ingin dijalankan oleh Anda. Bisakah saya mengatasi masalah ini dengan mengubah skema URL internal saya untuk menggunakan '#' alih-alih '?' Jadi, bukannya URL seperti ...

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

..Aku Menggunakan sesuatu seperti:

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

Ini akan mencegah parameter string kueri dikirim ke CloudFlare sama sekali ... Bagaimana menurut Anda?

Festus

Festus Martingale
sumber
Menggunakan "#" bukannya "?" di URL memecahkan masalah. Pengurus dapat melanjutkan dan menghapus pertanyaan saya.
Festus Martingale
4
Orang lain mungkin belajar dari apa yang Anda bayangkan di sini, jadi mungkin Anda dapat memberikan apa yang Anda lakukan di atas sebagai jawaban (dengan sedikit elaborasi) dan menerimanya ketika Anda bisa. Terima kasih.
dan

Jawaban:

4

(Jawaban ditambahkan untuk @Festus Martingale untuk menandai pertanyaan sebagai dijawab).

Mengganti ?dengan #memecahkan masalah karena mencegah string kueri dikirim ke cloudflare karena muncul sebagai fragmen hash.

Chris Rutherfurd
sumber
Nama saya Festus. Saya telah menandai ini sebagai jawaban.
Festus Martingale