在https://kith.com/products.json处发送了一个响应头,通知我正在访问缓存的数据x-cache: hit, client
,我想绕过它并接收响应头x-cache: miss
我已经传递了请求标头
'cache-control': 'no-store',
'pragma': 'no-cache'
这里是卷发
curl --location --request GET 'https://kith.com/products.json' \
--header 'Cache-Control: no-store' \
--header 'Pragma: no-cache'
请注意,尽管任何行为良好的代理(在这种情况下,例如,CloudFlare)应采取合理的措施,但服务器可能不会尊重客户端通过请求发送的与缓存相关的标头。
我尝试了您的测试请求并获得了x-cache: hit, server
。我可能第一次没有缓存,但这是在我的浏览器中发生的,并且网络日志已清除(随后获取favicon.ico)。
我不相信如果将服务器配置为在特定持续时间内缓存某些资源,则可以采用任何方法强制使用x-cache: miss
。
这里是CloudFlare Cache-Control info页面。请注意,它是从开发人员在原始服务器上工作并配置CloudFlare的角度编写的,而不是用户/客户端发出请求。
编辑:我刚刚意识到域kith.com
可能是一个流量很高的站点。我会考虑以任何方式绕过客户端缓存,这是服务器端的错误,会对他们的性能产生不利影响。
这有点骇人听闻,但在浏览器上进行测试似乎确实会导致缓存未命中。GET协议允许cloudflare必须假定将产生不同结果的查询字符串。但是,如果您发送目标将忽略的查询字符串,例如https://kith.com/products.json?a=a
,然后再发送https://kith.com/products.json?b=b
,则会触发高速缓存未命中,但kith.com仍将提供相同的文件。
没有强制任何服务器绕过网站所有者的缓存机制的可靠方法。服务器上的缓存受网站所有者的控制,他们在如何配置chache方面拥有广泛的自由裁量权。如果他们这样选择,则它们可以忽略传入请求中的任何标头和/或查询字符串,那么您试图强制执行高速缓存未命中的任何尝试将不起作用。
已经说过,如果网站所有者设置了允许某些类型的请求绕过缓存的缓存规则,那么您也许可以利用此即使您并未真正使用该类型的请求,
。将伪造的GET查询字符串放在URL上就是一个很好的例子。另一个经常使用的诡计是提交POST请求而不是GET-大多数网站将POST消息视为传入的承载数据的消息,并将其转发到服务器,并且大多数服务器如果不希望将任何POST请求作为GET处理表单提交。但是请记住,这实际上是对网站的滥用:所有者正在使用缓存来尝试减少主服务器上的负载,因此,绕过缓存的尝试实际上是在指责,这是对网站的侮辱网站所有者,有权受到冒犯。如果您确实
需要访问网站数据的原始版本,出于某些良好和严肃的目的,您可能应该与所有者联系,以了解他们是否愿意为您提供访问权限(也许通过非公开网址)到数据的原始服务器版本,但您需要提出充分的理由,并且我怀疑您可能很难说服它们。