不使用缓存的 cURL 命令


简介

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://tutorialspoint.com

服务器可能接受也可能不接受 Cache-Control 头。因此,此方法是否有效取决于我们正在发送 HTTP 请求的服务器或网站。

2. 包含 Pragma HTTP 头

我们可以使用 Pragma 头:-

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

与之前的方法一样,服务器可能考虑也可能不考虑此指令来服务新请求,但值得一试。

更改 URL

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

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

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

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

结论

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

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

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

更新于: 2022-11-21

2K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告