【问题标题】:How to call cURL without using server-side cache?如何在不使用服务器端缓存的情况下调用 cURL?
【发布时间】:2015-10-17 15:34:50
【问题描述】:

有没有办法告诉 cURL 命令不要使用服务器端的缓存? 例如;我有这个 curl 命令:

curl -v www.example.com

如何让 curl 发送一个不使用缓存的新请求?

注意:我正在终端中寻找可执行命令。

【问题讨论】:

  • 是什么让你认为 curl 正在缓存请求?
  • 我说的是服务器端缓存;假设该站点正在使用memcache
  • 如果你可以访问服务器,你可以实现一个绕过缓存的自定义参数,否则,没有。
  • 在服务器端编码您的应用程序以接受绕过缓存的参数。
  • 我认为 Alex 所说的是在 URL 中发送一个参数,例如 http://www.example.com/?caching=off 您也可以发送一个自定义标头:stackoverflow.com/questions/356705/… 但是您的服务器端应用程序当然必须理解这些命令并通过关闭缓存对它们进行操作。如果有人可以禁用远程站点的缓存机制,那将是一个巨大的安全漏洞

标签: linux bash caching curl memcached


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多