cURL 可以检测 307 响应吗?

Can cURL detect 307 response?

为了我的研究,我需要 cURL fqdns 并获取它们的状态代码。 (对于 Http、Https 服务)但是一些 http url 打开为 https,尽管它 returns 200 带有 cURL。 (请求成功,无重定向)

curl -I  http://example.example.com/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 22 Nov 2021 10:43:32 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 64991
Connection: keep-alive
Keep-Alive: timeout=20
Vary: Accept-Encoding
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Link: <https://example.example.com/>; rel=shortlink
X-Powered-By: WP Engine
X-Cacheable: SHORT
Vary: Accept-Encoding,Cookie
Cache-Control: max-age=600, must-revalidate
X-Cache: HIT: 10
X-Cache-Group: normal
Accept-Ranges: bytes

如上所示,我收到了 200 个 curl 请求响应。但是我可以在我的浏览器中看到 307 代码。 (下图可用)

Request URL: http://example.example.com/
Request Method: GET
Status Code: 307 Internal Redirect
Referrer Policy: strict-origin-when-cross-origin

我可以用 curl 检测 307 代码吗? (-L 参数不起作用)有什么建议吗?

curl -w '%{response_code}\n' -so /dev/null $URL

可以这样测试出来:

curl -w '%{response_code}\n' -so /dev/null httpbin.org/status/307 

那么问题中的307是什么?

正如 Stefan 在此处的单独回答中所解释的那样:这是一条来自 Chrome 的 内部 消息,通知您它使用 HSTS。它不是实际的响应代码。这就是 curl 无法显示的原因。 Chrome 应该更清楚。

HSTS

HSTS 是 HTTPS 服务器要求客户端不再通过明文 HTTP 与他们联系的一种方式。 curl 也支持 HSTS 但你需要使用 --hsts - curl 仍然不会混淆地声明任何 307 响应代码。

307 http 状态实际上并不是服务器发送的响应。这是一个内部重定向,您的浏览器甚至在将请求发送到服务器之前就为您做了一些事情。 这就是为什么它不会出现在 curl 中。这是您的浏览器的一项功能。 cURL 在发送未更改的请求时更加可靠。

在处理 HSTS(HTTP 严格传输安全)的安全功能时,通常会遇到 307(尤其是因为您提到了 https 重定向)内部重定向,其全部目的是确保您永远不会发送未加密的 http向想要通过加密 https 进行通信的服务器发出请求。

参见this