如何在不使用服务器端缓存的情况下调用 cURL?
Posted
技术标签:
【中文标题】如何在不使用服务器端缓存的情况下调用 cURL?【英文标题】:How to call cURL without using server-side cache? 【发布时间】:2015-10-17 15:34:50 【问题描述】:有没有办法告诉 cURL 命令不要使用服务器端的缓存? 例如;我有这个 curl 命令:
curl -v www.example.com
如何让 curl 发送一个不使用缓存的新请求?
注意:我正在终端中寻找可执行命令。
【问题讨论】:
是什么让你认为 curl 正在缓存请求? 我说的是服务器端缓存;假设该站点正在使用memcache
如果你可以访问服务器,你可以实现一个绕过缓存的自定义参数,否则,没有。
在服务器端编码您的应用程序以接受绕过缓存的参数。
我认为 Alex 所说的是在 URL 中发送一个参数,例如 http://www.example.com/?caching=off
您也可以发送一个自定义标头:***.com/questions/356705/… 但是您的服务器端应用程序当然必须理解这些命令并通过关闭缓存对它们进行操作。如果有人可以禁用远程站点的缓存机制,那将是一个巨大的安全漏洞
【参考方案1】:
我知道这是一个较老的问题,但我想为有相同问题的用户发布答案:
curl -H 'Cache-Control: no-cache' http://www.example.com
此 curl 命令服务器在其标头请求中从 Web 服务器返回非缓存数据。
【讨论】:
为什么这被否决了?这对我很有用,它回答了这个问题。 我同意 Monkpit。这很好用,应该被接受为答案。 这有时会有所帮助,但不能保证有效。中间的服务器或代理可以忽略no-cache
请求。【参考方案2】:
-H 'Cache-Control: no-cache'
参数不能保证有效,因为远程服务器或中间的任何代理层可以忽略它。如果它不起作用,您可以通过添加唯一的查询字符串参数来使用老式方法。通常,服务器/代理会认为它是唯一的 URL,而不使用缓存。
curl "http://www.example.com?foo123"
不过,您每次都必须使用不同的查询字符串值。否则,服务器/代理将再次匹配缓存。要每次自动生成不同的查询字符串参数,可以使用date +%s
,它将返回自纪元以来的秒数。
curl "http://www.example.com?$(date +%s)"
【讨论】:
你拯救了我的一天! 这是一个很棒的老派提示。值得它的黄金重量。谢谢! \o/ 尝试将其与 GitHub 的原始文件一起使用,但没有运气:(【参考方案3】:-H 'Pragma: no-cache'
和 -H 'Cache-Control: no-cache'
都没有帮助我。在带有“cmd+shift+r”(完全重新加载)的浏览器中,我看到了一个新版本,而不是终端中curl
的输出。
如何自己调试
为了得到完全相同的结果,我转到浏览器 > F12(开发工具)> 网络/请求 > 右键单击请求 > “复制为 cURL”并得到 等效 cURL 命令到浏览器的调用。
然后,我将其粘贴到终端并开始一一删除参数,直到我发现 --compressed
令人惊讶地对我的情况产生了影响。 (调用 CloudFront AWS)
【讨论】:
以上是关于如何在不使用服务器端缓存的情况下调用 cURL?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用处理程序的情况下使用 ajax 从客户端将文件发送到服务器端?