有没有办法告诉cURL命令不要使用服务器端的缓存?我有一个curl命令:curl -v www.example.com我如何让curl发送一个新的请求以不使用该高速缓存呢?
curl -v www.example.com
注意:我正在终端中查找可执行命令。
mlnl4t2r1#
我知道这是一个老问题,但我想为有同样问题的用户发布一个答案:
curl -H 'Cache-Control: no-cache' http://www.example.com
此curl命令在其标头中请求服务器从Web服务器返回非缓存数据。
flvtvl502#
-H 'Cache-Control: no-cache' 参数 不 一定 有效 , 因为 远程 服务 器 或 中间 的 任何 代理 层 都 可以 忽略 它 。 如果 它 不 起 作用 , 你 可以 用 老式 的 方法 , 通过 添加 一 个 唯一 的 querystring 参数 来 实现 。 通常 , 服务 器/代理 会 认为 它 是 一 个 唯一 的 URL , 而 不 使用 缓存 。
-H 'Cache-Control: no-cache'
curl "http://www.example.com?foo123"
中 的 每 一 个但是 每次 都 必须 使用 不同 的 querystring 值 , 否则 服务 器/代理 将 再次 匹配 缓存 。 要 每次 自动 生成 不同 的 querystring 参数 , 可以 使用 date +%s , 它 将 返回 自 epoch 以来 的 秒 数 。
date +%s
curl "http://www.example.com?$(date +%s)"
格式
zysjyyx43#
无论是-H 'Pragma: no-cache'还是-H 'Cache-Control: no-cache'都没有帮助我。在浏览器中使用“cmd+shift+r”(完全重载),我看到了一个新版本,而不是终端中的curl输出。
-H 'Pragma: no-cache'
curl
为了得到完全相同的结果,我转到浏览器〉F12(开发工具)〉网络/请求〉右键单击请求〉“复制为cURL”,并得到了与浏览器调用等效的cURL命令。然后,我将其粘贴到终端中,并开始逐个删除参数,直到我意外地发现--compressed在我的案例中起了作用。(调用CloudFront AWS)
--compressed
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
zsh: no matches found
curl 'https://cssrq1srud.execute-api.us-east-1.amazonaws.com/serverless_lambda_stage/hello?Name=Terraform'
返回{"message":"Hello, Terraform!"}
{"message":"Hello, Terraform!"}
zujrkrfu5#
这对我不起作用:
但这最终起到了作用:
curl -H 'Cache-Control: no-cache' http://www.example.com&someFakeParam=$RANDOM
&someFakeParam=$RANDOM使URL每次都是唯一的,并绕过缓存。
zpqajqem6#
您可以尝试以下方法来强制在curl时不保留Cache。注意:服务器可能会或可能不会被配置为支持Cache-Control头。因此,此方法是否有效取决于我们将HTTP请求发送到的服务器或网站。
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)
6条答案
按热度按时间mlnl4t2r1#
我知道这是一个老问题,但我想为有同样问题的用户发布一个答案:
此curl命令在其标头中请求服务器从Web服务器返回非缓存数据。
flvtvl502#
-H 'Cache-Control: no-cache'
参数 不 一定 有效 , 因为 远程 服务 器 或 中间 的 任何 代理 层 都 可以 忽略 它 。 如果 它 不 起 作用 , 你 可以 用 老式 的 方法 , 通过 添加 一 个 唯一 的 querystring 参数 来 实现 。 通常 , 服务 器/代理 会 认为 它 是 一 个 唯一 的 URL , 而 不 使用 缓存 。中 的 每 一 个
但是 每次 都 必须 使用 不同 的 querystring 值 , 否则 服务 器/代理 将 再次 匹配 缓存 。 要 每次 自动 生成 不同 的 querystring 参数 , 可以 使用
date +%s
, 它 将 返回 自 epoch 以来 的 秒 数 。格式
zysjyyx43#
无论是
-H 'Pragma: no-cache'
还是-H 'Cache-Control: no-cache'
都没有帮助我。在浏览器中使用“cmd+shift+r”(完全重载),我看到了一个新版本,而不是终端中的curl
输出。如何自行调试
为了得到完全相同的结果,我转到浏览器〉F12(开发工具)〉网络/请求〉右键单击请求〉“复制为cURL”,并得到了与浏览器调用等效的cURL命令。
然后,我将其粘贴到终端中,并开始逐个删除参数,直到我意外地发现
--compressed
在我的案例中起了作用。(调用CloudFront AWS)elcex8rz4#
我的问题是我应该在查询字符串中使用单引号。
我的代码
我的请求
返回
zsh: no matches found
返回
{"message":"Hello, Terraform!"}
zujrkrfu5#
这对我不起作用:
但这最终起到了作用:
&someFakeParam=$RANDOM使URL每次都是唯一的,并绕过缓存。
zpqajqem6#
您可以尝试以下方法来强制在
curl
时不保留Cache。注意:服务器可能会或可能不会被配置为支持
Cache-Control
头。因此,此方法是否有效取决于我们将HTTP
请求发送到的服务器或网站。带有缓存控制头的curl命令
正在添加编译指示HTTP标头
最后,最常见的方式:通过更改URL绕过该高速缓存