Cloudflare:URL具有查询字符串时缓存静态HTML


10

快速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 ...您如何看待?

节日


使用“#”代替“?” URL中的问题已解决。Sysops可以继续删除我的问题。
Festus Martingale

4
其他人可能会从您在这里找到的内容中学习,因此也许您可以提供您上面所做的作为答案(稍作阐述),并在可能时接受。谢谢。

Answers:


4

(为@Festus Martingale添加了答案,以将问题标记为已回答)。

?用已#解决的问题代替,因为它可以防止查询字符串显示为哈希片段,从而将查询字符串传输到cloudflare。


我叫Festus。我已将此标记为答案。
Festus Martingale '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.