Abd*_*kli 13 https curl http httpresponse
为了我的研究,我需要 cURL fqdn 并获取它们的状态代码。(对于 Http、Https 服务)但是有些 http url 以 https 的形式打开,尽管它使用 cURL 返回 200。(请求成功,无重定向)
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
Run Code Online (Sandbox Code Playgroud)
如上所示,我收到了 200 个带有curl 请求的响应。但我可以在浏览器中看到 307 代码。(如下图所示)
Request URL: http://example.example.com/
Request Method: GET
Status Code: 307 Internal Redirect
Referrer Policy: strict-origin-when-cross-origin
Run Code Online (Sandbox Code Playgroud)
我可以用curl检测307代码吗?(-L 参数不起作用)有什么建议吗?
Dan*_*erg 65
curl -w '%{response_code}\n' -so /dev/null $URL
Run Code Online (Sandbox Code Playgroud)
可以这样测试:
curl -w '%{response_code}\n' -so /dev/null httpbin.org/status/307
Run Code Online (Sandbox Code Playgroud)
正如 Stefan 在一个单独的答案中解释的那样:这是来自 Chrome 的内部消息,通知您它使用 HSTS。它不是实际的响应代码。这就是为什么curl无法显示它。Chrome 应该会让这一点更清楚。
HSTS 是 HTTPS 服务器要求客户端不要再次通过明文 HTTP 联系它们的一种方式。curl 还支持 HSTS,但您需要使用--hsts- 并且curl 仍然不会混淆地声明任何 307 响应代码。
小智 10
307 http 状态实际上并不是服务器发送的响应。这是一个内部重定向,是浏览器在向服务器发送请求之前为您执行的操作。这就是为什么它不会出现在卷曲中。这是您的浏览器的一项功能。cURL在发送未更改的请求时更加可靠。
在处理 HSTS(HTTP 严格传输安全)的安全功能时,通常会遇到 307(特别是因为您提到了 https 重定向)内部重定向,其全部目的是确保您永远不会将未加密的 http 请求发送到以下服务器:想要通过加密的 https 进行通信。
看到这个。
| 归档时间: |
|
| 查看次数: |
13185 次 |
| 最近记录: |