快速CloudFlare“新用户”问题为您提供:
背景:我的原始服务器提供的HTML页面永远不会改变。在页面加载到用户浏览器后,所有动态内容都将通过JavaScript下载。JavaScript派生的动态内容部分取决于URL的查询字符串,但是查询字符串本身对最初下载的HTML内容没有影响。因此,以下URL 在被浏览器中的JavaScript作用之前,都会从源生成完全相同的HTML:
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
问题:鉴于CloudFlare默认情况下不缓存HTML,我应如何构造我的页面规则,以便将https://www.example.com/private/my-investments的单个缓存副本返回给所有用户? ?这是我尝试过的:
“ CACHE EVERYTHING:”使用'Cache Everything'指令导致对HTML进行缓存(良好),但是它将整个查询字符串用作缓存键的一部分(不良)。因此,如果用户点击以下网址...
https://www.example.com/private/my-investments?portfolioID=296
...然后十秒钟后,使用不同的查询字符串命中相同的URL,例如:
https://www.example.com/private/my-investments?portfolioID=325
... CloudFlare将后者的请求视为缓存MISS(cf-cache-status:MISS),然后再次命中我的原始服务器。尽管事实是两个URL从原点返回的HTML都是相同的。
“ IGNORE QUERY STRING CACHING:”我想肯定可以通过选择“ IGNORE QUERY STRING CACHING”选项来解决此问题。但是,在“页面规则”中使用此选项时,根本不会缓存HTML。仅缓存.js,.css和.png文件。再一次,每次对HTML数据的调用都会使我的起源受到打击。:(
我觉得我一定缺少明显的东西。有什么想法吗?
更新:有一个主意,我想由您管理。我可以通过将内部URL方案更改为使用“#”而不是“?”来解决此问题吗?因此,而不是像...这样的URL
https://www.example.com/private/my-investments?portfolioID=296
..我会使用类似:
https://www.example.com/private/my-investments#portfolioID=296
这将完全阻止查询字符串参数传输到CloudFlare ...您如何看待?
节日