Cloudflare: memorizza nella cache HTML statico quando l'URL ha una stringa di query


10

Quick CloudFai la domanda "nuovo utente" per te:

BACKGROUND: Le pagine HTML fornite dal mio server di origine non cambiano mai. Tutto il contenuto dinamico viene scaricato tramite JavaScript dopo che la pagina è stata caricata nel browser dell'utente. Il contenuto dinamico derivato da JavaScript dipende in parte dalla stringa di query dell'URL, ma la stringa di query stessa non ha alcun effetto sul contenuto HTML scaricato originariamente. Pertanto, i seguenti URL generano esattamente lo stesso HTML dall'origine prima di essere influenzati da JavaScript nel 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

DOMANDA: Dato che CloudFlare non memorizza nella cache HTML di default, come devo costruire le mie regole di pagina in modo che una singola copia cache di https://www.example.com/private/my-investments?[anyValue] venga restituita a tutti gli utenti ? Ecco cosa ho provato:

"CACHE EVERYTHING:" L'uso della direttiva "Cache Everything" fa sì che il mio HTML venga memorizzato nella cache (buono) ma utilizza l'intera stringa di query come parte della chiave della cache (cattivo). Quindi se un utente colpisce il seguente URL ...

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

... e poi dieci secondi dopo colpisce lo stesso URL con una stringa di query diversa, come:

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

... CloudFlare considera quest'ultima richiesta come cache MISS (cf-cache-status: MISS) e colpisce di nuovo il mio server di origine. Ciò nonostante il fatto che il codice HTML restituito dall'origine sia identico per entrambi gli URL.

"IGNORE QUERY STRING CACHING:" Ho pensato di certo a risolvere questo problema selezionando l'opzione "IGNORE QUERY STRING CACHING". Ma quando si utilizza questa opzione in una regola di pagina, nessun HTML viene memorizzato nella cache; Vengono memorizzati nella cache solo i file .js, .css e .png. E ancora una volta la mia origine viene colpita per ogni singola chiamata per i dati HTML. :(

Mi sento come se mi mancasse qualcosa di ovvio. qualche idea?

AGGIORNAMENTO : Ho avuto un'idea che volevo correre da te. Posso risolvere questo problema modificando il mio schema URL interno per utilizzare "#" anziché "?" Quindi invece di un URL come ...

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

.. Userei qualcosa del tipo:

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

Ciò impedirebbe la trasmissione a CloudFlare dei parametri della stringa di query ... Cosa ne pensi?

Festus


Utilizzando "#" anziché "?" nell'URL risolto il problema. Sysops può andare avanti ed eliminare la mia domanda.
Festus Martingale,

4
Altri potrebbero imparare da ciò che hai capito qui, quindi forse puoi fornire ciò che hai fatto sopra come una risposta (con una piccola elaborazione) e accettarlo quando puoi. Grazie.
dan

Risposte:


4

(Risposta aggiunta per @Festus Martingale per contrassegnare la domanda come risposta).

Sostituendo il ?con un #risolto il problema in quanto impedisce la stringa di query si trasmettano al cloudflare come appare come un frammento hash.


Mi chiamo Festus. Ho contrassegnato questo come una risposta.
Festus Martingale,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.