不使用缓存的 cURL 命令

linuxopen sourceoperating system更新于 2026/1/30 5:52:17

简介

cURL(客户端 URL)是一个命令行工具。它利用支持的 libcurl 库,允许在无需用户交互的情况下与服务器之间传输数据。cURL 还可用于排除网络连接故障。

在某些情况下,我们可能需要发送绕过缓存的请求,并从服务器生成新的响应。缓存可以发生在客户端(浏览器缓存)或服务器端。

使用 cURL 命令时,请记住它只是一个 HTTP 客户端,不会在客户端缓存任何请求。因此,使用此命令时发生的任何缓存都会发生在服务器上。为了避免服务器端缓存,我们可以修改发送的 HTTP 请求。但是,根据服务器的缓存配置方式,这些修改可能会或可能不会起作用。这些更改将在下文进一步讨论。我们可以在不使用缓存的情况下使用 curl 命令,方法是:-

  • Cache-Control HTTP 标头包含

  • Pragma HTTP 标头包含

  • 更改 URL

1. Cache-Control HTTP 标头包含

我们可以使用带有 Cache-Control 标头的 curl 命令,并包含以下指令 -

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

服务器可能会或可能不会遵循 Cache-Control 标头。因此,此方法是否有效取决于我们向其发送 HTTP 请求的服务器或网站。

2. Pragma HTTP 标头包含

我们可以使用 Pragma 标头 -

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

与上一种方法一样,服务器可能会或可能不会考虑使用此指令来处理新请求,但值得一试。

更改 URL

-H 'Cache-Control: "no-cache"参数不保证有效,因为它可能会被远程服务器或其间的任何代理层忽略。如果失败,您可以通过添加一个唯一的查询字符串参数来使用传统方法。通常,服务器/代理会将其视为唯一的 URL,并且不会使用缓存。

$ curl http://www.tutorialspoint.com?$RANDOM

但是,您必须每次都使用不同的查询字符串值。否则,服务器/代理将再次匹配缓存。要每次生成不同的查询字符串参数,请使用 date +%s,该命令返回自纪元以来的秒数。

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

结论

首先,我们必须注意,cURL 命令不会执行任何客户端缓存,使用此命令时发生的任何缓存都发生在服务器端。为了绕过服务器端的缓存,我们可以使用 HTTP 标头(例如 CacheControl 和 Pragma)以及相应的指令,或者通过修改 URL 的查询参数来更改要访问的 URL。

这些方法可能有效,也可能无效,具体取决于服务器端的配置。调整查询参数也存在更改预期响应的风险。

因此,如果我们能够控制服务器端代码和部署,则应始终从服务器端解决此问题。否则,我们可以参考提供的文档或联系所用服务的支持团队。这是确定相关系统缓存工作原理的唯一方法。


相关文章


有用资源