web-dev-qa-db-fra.com

Cloudflare: Cache HTML statique lorsque l'URL contient une chaîne de requête

Quick CloudFlare 'nouvel utilisateur' question pour vous:

CONTEXTE: Les pages HTML servies par mon serveur Origin ne changent jamais. Tout le contenu dynamique est téléchargé via JavaScript après le chargement de la page dans le navigateur de l'utilisateur. Le contenu dynamique dérivé par JavaScript dépend en partie de la chaîne de requête de l'URL, mais la chaîne de requête elle-même n'a aucune incidence sur le contenu HTML téléchargé à l'origine. Par conséquent, les URL suivantes génèrent toutes exactement le même code HTML à partir de l’origine avant d’être utilisé par JavaScript dans le navigateur:

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

QUESTION: Etant donné que CloudFlare ne met pas le HTML en cache par défaut, comment puis-je construire mes règles de page de sorte qu'une seule copie en cache de https://www.example.com/private/my-investments? [AnyValue] est renvoyé à tous les utilisateurs? Voici ce que j'ai essayé:

"CACHE EVERYTHING:" L'utilisation de la directive 'Cache Everything' provoque la mise en cache de mon code HTML (correct), mais utilise la chaîne de requête complète dans le cadre de la clé de cache (incorrecte). Donc, si un utilisateur frappe l'URL suivante ...

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

... puis dix secondes plus tard, la même adresse URL avec une chaîne de requête différente, telle que:

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

... CloudFlare traite cette dernière demande comme un cache MISS (cf-cache-status: MISS) et frappe à nouveau mon serveur Origin. Ceci en dépit du fait que le code HTML renvoyé par l’origine est identique pour les deux URL.

"IGNORE QUERY STRING CACHING:" Je pensais pouvoir résoudre ce problème en sélectionnant l'option "IGNORE QUERY STRING CACHING". Mais lors de l'utilisation de cette option dans une règle de page, aucun code HTML n'est mis en cache. Seuls les fichiers .js, .css et .png sont mis en cache. Et encore une fois, mon origine est touchée à chaque appel de données HTML. :(

Je sens que je dois manquer quelque chose d'évident. Des pensées?

UPDATE: Avait une idée que je veux exécuter par vous. Pourrais-je résoudre ce problème en modifiant mon schéma d'URL interne afin qu'il utilise "#" au lieu de "?" Donc au lieu d'une URL comme ...

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

..J'utiliserais quelque chose comme:

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

Cela empêcherait la transmission des paramètres de la chaîne de requête à CloudFlare ... Qu'en pensez-vous?

Festus

10
Festus Martingale

(Réponse ajoutée pour @Festus Martingale pour marquer la question comme répondue).

Remplacer le ? par un # a résolu le problème car il empêche la chaîne de requête d'être transmise à cloudflare car elle apparaît sous la forme d'un fragment de hachage.

4
Chris Rutherfurd