对于我的研究,我需要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
如上所述,我收到了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
在发送未更改的请求时要可靠得多。
在处理HSTS(HTTP严格传输安全(的安全功能时,通常会遇到307(特别是因为您提到了https重定向(内部重定向,其中的全部目的是确保您永远不会向希望通过加密https通信的服务器发送未加密的HTTP请求。
看看这个。