必须将哪些请求标头发送到服务器,以便它为您提供非缓存的响应

问题描述 投票:1回答:3

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'
node.js caching https cloudflare cache-control
3个回答
0
投票

请注意,尽管任何行为良好的代理(在这种情况下,例如,CloudFlare)应采取合理的措施,但服务器可能不会尊重客户端通过请求发送的与缓存相关的标头。

我尝试了您的测试请求并获得了x-cache: hit, server。我可能第一次没有缓存,但这是在我的浏览器中发生的,并且网络日志已清除(随后获取favicon.ico)。

我不相信如果将服务器配置为在特定持续时间内缓存某些资源,则可以采用任何方法强制使用x-cache: miss

这里是CloudFlare Cache-Control info页面。请注意,它是从开发人员在原始服务器上工作并配置CloudFlare的角度编写的,而不是用户/客户端发出请求。

编辑:我刚刚意识到域kith.com可能是一个流量很高的站点。我会考虑以任何方式绕过客户端缓存,这是服务器端的错误,会对他们的性能产生不利影响。


0
投票

这有点骇人听闻,但在浏览器上进行测试似乎确实会导致缓存未命中。GET协议允许cloudflare必须假定将产生不同结果的查询字符串。但是,如果您发送目标将忽略的查询字符串,例如https://kith.com/products.json?a=a,然后再发送https://kith.com/products.json?b=b,则会触发高速缓存未命中,但kith.com仍将提供相同的文件。


0
投票

没有强制任何服务器绕过网站所有者的缓存机制的可靠方法。服务器上的缓存受网站所有者的控制,他们在如何配置chache方面拥有广泛的自由裁量权。如果他们这样选择,则它们可以忽略传入请求中的任何标头和/或查询字符串,那么您试图强制执行高速缓存未命中的任何尝试将不起作用。

已经说过,如果网站所有者设置了允许某些类型的请求绕过缓存的缓存规则,那么您也许可以利用此即使您并未真正使用该类型的请求,

。将伪造的GET查询字符串放在URL上就是一个很好的例子。另一个经常使用的诡计是提交POST请求而不是GET-大多数网站将POST消息视为传入的承载数据的消息,并将其转发到服务器,并且大多数服务器如果不希望将任何POST请求作为GET处理表单提交。但是请记住,这实际上是对网站的滥用:所有者正在使用缓存来尝试减少主服务器上的负载,因此,绕过缓存的尝试实际上是在指责,这是对网站的侮辱网站所有者,有权受到冒犯。

如果您确实

需要访问网站数据的原始版本,出于某些良好和严肃的目的,您可能应该与所有者联系,以了解他们是否愿意为您提供访问权限(也许通过非公开网址)到数据的原始服务器版本,但您需要提出充分的理由,并且我怀疑您可能很难说服它们。
© www.soinside.com 2019 - 2024. All rights reserved.