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。
为了我的研究,我需要 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。