Cloudflare: caché HTML estático cuando la URL tiene una cadena de consulta


10

Pregunta rápida de 'nuevo usuario' de CloudFlare para usted:

ANTECEDENTES: las páginas HTML publicadas por mi servidor de origen nunca cambian. Todo el contenido dinámico se descarga a través de JavaScript después de cargar la página en el navegador del usuario. El contenido dinámico derivado de JavaScript depende en parte de la cadena de consulta de la URL, pero la cadena de consulta en sí no afecta el contenido HTML que se descargó originalmente. Por lo tanto, las siguientes URL generan exactamente el mismo HTML desde el origen antes de que JavaScript actúe sobre ellas en el navegador:

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

PREGUNTA: Dado que CloudFlare no almacena en caché HTML de forma predeterminada, ¿cómo construiré las Reglas de mi página para que se devuelva a todos los usuarios una copia en caché de https://www.example.com/private/my-investments?[anyValue] ? Esto es lo que he intentado:

"CACHE TODO:" El uso de la directiva 'Cache Everything' hace que mi HTML se almacene en caché (bueno) pero usa toda la cadena de consulta como parte de la clave de caché (malo). Entonces, si un usuario llega a la siguiente URL ...

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

... y luego diez segundos después llega a la misma URL con una cadena de consulta diferente, como:

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

... CloudFlare trata esa última solicitud como un caché MISS (cf-cache-status: MISS) y vuelve a mi servidor de origen. Esto a pesar del hecho de que el HTML devuelto desde el origen es idéntico para ambas URL.

"IGNORE QUERY STRING CACHING:" Pensé con seguridad que solucionaría este problema seleccionando la opción "IGNORE QUERY STRING CACHING". Pero cuando se usa esta opción en una regla de página, no se almacena en caché HTML; Solo los archivos .js, .css y .png se almacenan en caché. Y una vez más, mi origen se ve afectado por cada llamada de datos HTML. :(

Siento que me falta algo obvio. ¿Alguna idea?

ACTUALIZACIÓN : Tenía una idea que quiero correr por usted. ¿Podría resolver este problema cambiando mi esquema de URL interna para usar '#' en lugar de '?' Entonces, en lugar de una URL como ...

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

.. Usaría algo como:

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

Esto evitaría que los parámetros de la cadena de consulta se transmitan a CloudFlare en absoluto ... ¿Qué opinas?

Festus


Usando "#" en lugar de "?" en la URL resolvió el problema. Sysops puede continuar y eliminar mi pregunta.
Festus Martingale

44
Otros pueden aprender de lo que descubriste aquí, así que tal vez puedas proporcionar lo que hiciste arriba como respuesta (con un poco de elaboración) y aceptarlo cuando puedas. Gracias.
dan

Respuestas:


4

(Se agregó una respuesta para @Festus Martingale para marcar la pregunta como respondida).

Reemplazar el ?con un #solucionó el problema ya que evita que la cadena de consulta se transmita a cloudflare como aparece como un fragmento hash.


Me llamo Festo. He marcado esto como una respuesta.
Festus Martingale
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.