不使用缓存的 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。
这些方法可能有效也可能无效,具体取决于服务器端的配置。调整查询参数也存在更改预期响应的风险。
因此,如果我们能够控制服务器端代码和部署,我们应该始终从服务器端解决此问题。否则,我们可以参考提供的文档或联系我们正在使用的服务的支持团队。这是确保所讨论系统缓存工作方式的唯一方法。