Cloudflare: cache le HTML statique lorsque l'URL a une chaîne de requête


10

Question "nouvel utilisateur" rapide pour CloudFlare:

CONTEXTE: Les pages HTML servies par mon serveur d'origine 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é du 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 aucun effet sur le contenu HTML téléchargé à l'origine. Les URL suivantes génèrent donc toutes exactement le même HTML à partir de l'origine avant d'être traitées 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: Étant donné que CloudFlare ne met pas en cache HTML par défaut, comment dois-je construire mes règles de page afin qu'une seule copie mise en cache de https://www.example.com/private/my-investments?[anyValue] soit renvoyée à tous les utilisateurs ? Voici ce que j'ai essayé:

"TACHE TOUT:" L'utilisation de la directive 'Cache Everything' fait que mon HTML est mis en cache (bon) mais il utilise la chaîne de requête entière dans le cadre de la clé de cache (mauvaise). Donc, si un utilisateur frappe l'URL suivante ...

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

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

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 d'origine. Ceci malgré le fait que le code HTML renvoyé depuis l'origine est identique pour les deux URL.

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

J'ai l'impression que je dois manquer quelque chose d'évident. Des pensées?

MISE À JOUR : J'ai eu une idée que je veux diriger par vous. Puis-je résoudre ce problème en modifiant mon schéma d'URL interne pour utiliser «#» 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 les paramètres de chaîne de requête d'être transmis à CloudFlare ... Que pensez-vous?

Festus


Utilisation de "#" au lieu de "?" dans l'URL a résolu le problème. Sysops peut continuer et supprimer ma question.
Festus Martingale

4
D'autres pourraient apprendre de ce que vous avez compris ici, alors peut-être pouvez-vous fournir ce que vous avez fait ci-dessus comme réponse (avec un peu d'élaboration) et l'accepter quand vous le pouvez. Merci.
dan

Réponses:


4

(Réponse ajoutée pour @Festus Martingale pour marquer la question comme ayant été 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 comme un fragment de hachage.


Je m'appelle Festus. J'ai marqué cela comme une réponse.
Festus Martingale
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.