如何在不使用服务器端缓存的情况下调用cURL?

62o28rlo  于 2022-11-13  发布在  其他
关注(0)|答案(6)|浏览(206)

有没有办法告诉cURL命令不要使用服务器端的缓存?我有一个curl命令:
curl -v www.example.com
我如何让curl发送一个新的请求以不使用该高速缓存呢?

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

mlnl4t2r

mlnl4t2r1#

我知道这是一个老问题,但我想为有同样问题的用户发布一个答案:

curl -H 'Cache-Control: no-cache' http://www.example.com

此curl命令在其标头中请求服务器从Web服务器返回非缓存数据。

flvtvl50

flvtvl502#

-H 'Cache-Control: no-cache' 参数 不 一定 有效 , 因为 远程 服务 器 或 中间 的 任何 代理 层 都 可以 忽略 它 。 如果 它 不 起 作用 , 你 可以 用 老式 的 方法 , 通过 添加 一 个 唯一 的 querystring 参数 来 实现 。 通常 , 服务 器/代理 会 认为 它 是 一 个 唯一 的 URL , 而 不 使用 缓存 。

curl "http://www.example.com?foo123"

中 的 每 一 个
但是 每次 都 必须 使用 不同 的 querystring 值 , 否则 服务 器/代理 将 再次 匹配 缓存 。 要 每次 自动 生成 不同 的 querystring 参数 , 可以 使用 date +%s , 它 将 返回 自 epoch 以来 的 秒 数 。

curl "http://www.example.com?$(date +%s)"

格式

zysjyyx4

zysjyyx43#

无论是-H 'Pragma: no-cache'还是-H 'Cache-Control: no-cache'都没有帮助我。在浏览器中使用“cmd+shift+r”(完全重载),我看到了一个新版本,而不是终端中的curl输出。

如何自行调试

为了得到完全相同的结果,我转到浏览器〉F12(开发工具)〉网络/请求〉右键单击请求〉“复制为cURL”,并得到了与浏览器调用等效的cURL命令。
然后,我将其粘贴到终端中,并开始逐个删除参数,直到我意外地发现--compressed在我的案例中起了作用。(调用CloudFront AWS)

elcex8rz

elcex8rz4#

我的问题是我应该在查询字符串中使用单引号。
我的代码

if (event.queryStringParameters && event.queryStringParameters['Name']) {
    responseMessage = 'Hello, ' + event.queryStringParameters['Name'] + '!';
  }

我的请求

curl https://cssrq1srud.execute-api.us-east-1.amazonaws.com/serverless_lambda_stage/hello?Name=Terraform

返回zsh: no matches found

curl 'https://cssrq1srud.execute-api.us-east-1.amazonaws.com/serverless_lambda_stage/hello?Name=Terraform'

返回{"message":"Hello, Terraform!"}

zujrkrfu

zujrkrfu5#

这对我不起作用:

curl -H 'Cache-Control: no-cache' http://www.example.com

但这最终起到了作用:

curl -H 'Cache-Control: no-cache' http://www.example.com&someFakeParam=$RANDOM

&someFakeParam=$RANDOM使URL每次都是唯一的,并绕过缓存。

zpqajqem

zpqajqem6#

您可以尝试以下方法来强制在curl时不保留Cache。
注意:服务器可能会或可能不会被配置为支持Cache-Control头。因此,此方法是否有效取决于我们将HTTP请求发送到的服务器或网站。

带有缓存控制头的curl命令

$ curl -H 'Cache-Control: no-cache, no-store' http://www.example.com

正在添加编译指示HTTP标头

$ curl -H 'Pragma: no-cache' http://www.example.com

最后,最常见的方式:通过更改URL绕过该高速缓存

curl -H 'Cache-Control: no-cache, no-store' http://www.example.com?$(date +%s)

相关问题