HTTP GET请求始终返回301

HTTP GET请求始终返回301,http,Http,我试图通过一个简单的GET请求从IETF网站获取一些RFC的HTML转储。但是,它以状态代码301响应。我正在使用netcat使用以下命令模拟HTTP GET请求: $ printf 'GET /html/rfc3986 HTTP/1.1\r\nHost: tools.ietf.org\r\nConnection: close\r\n\r\n' | nc tools.ietf.org 80 HTTP/1.1 301 Moved Permanently Date: Wed, 09 Sep 202

我试图通过一个简单的GET请求从IETF网站获取一些RFC的HTML转储。但是,它以状态代码301响应。我正在使用
netcat
使用以下命令模拟HTTP GET请求:

$ printf 'GET /html/rfc3986 HTTP/1.1\r\nHost: tools.ietf.org\r\nConnection: close\r\n\r\n' | nc tools.ietf.org 80
HTTP/1.1 301 Moved Permanently
Date: Wed, 09 Sep 2020 15:36:36 GMT
Server: Apache/2.2.22 (Debian)
Location: https://tools.ietf.org/html/rfc3986
Vary: Accept-Encoding
Content-Length: 323
Connection: close
Content-Type: text/html; charset=iso-8859-1
X-Pad: avoid browser bug

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://tools.ietf.org/html/rfc3986">here</a>.</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at tools.ietf.org Port 80</address>
</body></html>
通过上述命令获得以下回复:

$ printf 'GET /html/rfc3986 HTTP/1.1\r\nHost: tools.ietf.org\r\nConnection: close\r\n\r\n' | nc tools.ietf.org 80
HTTP/1.1 301 Moved Permanently
Date: Wed, 09 Sep 2020 15:36:36 GMT
Server: Apache/2.2.22 (Debian)
Location: https://tools.ietf.org/html/rfc3986
Vary: Accept-Encoding
Content-Length: 323
Connection: close
Content-Type: text/html; charset=iso-8859-1
X-Pad: avoid browser bug

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://tools.ietf.org/html/rfc3986">here</a>.</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at tools.ietf.org Port 80</address>
</body></html>
答复:

HTTP/1.1 404 Not Found
Date: Wed, 09 Sep 2020 16:32:18 GMT
Server: Apache/2.2.22 (Debian)
Vary: accept-language,accept-charset,Accept-Encoding
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=iso-8859-1
Content-Language: en
Expires: Wed, 09 Sep 2020 16:32:18 GMT

我使用
GET
方法获取结果的方式是否有错误?

您正在向端口80发送纯文本请求,因此您尝试的URL实际上是
http://tools.ietf.org/html/rfc3986

响应告诉您改为请求
https://tools.ietf.org/html/rfc3986
。这不是同一服务器上的不同路径,而是完整的URL

不同之处在于,它开始于
https
,这意味着您需要在端口443上建立TLS安全连接


这在netcat的简单使用中是不可能的,因此最好使用像curl或wget这样的HTTP客户机,因为您正在向端口80发送纯文本请求,所以您尝试的URL实际上是
http://tools.ietf.org/html/rfc3986

响应告诉您改为请求
https://tools.ietf.org/html/rfc3986
。这不是同一服务器上的不同路径,而是完整的URL

不同之处在于,它开始于
https
,这意味着您需要在端口443上建立TLS安全连接


简单使用netcat是不可能做到这一点的,因此您最好使用像curl或wget这样的HTTP客户端,直接使用443端口而不是80端口作为回复,并提到一个类似于您的推理。是否有一个RFC,告诉您如何设计基于HTTPS的头?@Argon HTTPS是(简化的)TLS+HTTP。您将很难使用netcat之类的工具手动构建HTTPS请求。您可能可以与openssl结合使用,但为什么不使用类似于
curl
?@Argon的东西呢?一方面,是的,TLS是一个公共标准,只需查找一下即可。另一方面,尝试从头开始编写网络加密的实现只是为了下载一些网页,这就像试图建造一座摩天大楼,因为你的花园小屋不够大。这不是出于好奇,你打算在一个下午做的事情。非常感谢@Evert。实际上,我正试图通过C发送HTTP请求。因为我无意中发现了通过C代码回复的状态代码301,所以我冲向
netcat
模拟请求,看看我是否在C中出错。当我在
netcat
中也获得了完全相同的结果时,我就这样做了。但我也会给大家介绍一下curl。难怪直接使用443端口而不是80端口作为回复,并提到了一个类似于您的推理。是否有一个RFC,告诉我们如何设计基于HTTPS的头?@Argon HTTPS是(简化的)TLS+HTTP。您将很难使用netcat之类的工具手动构建HTTPS请求。您可能可以与openssl结合使用,但为什么不使用类似于
curl
?@Argon的东西呢?一方面,是的,TLS是一个公共标准,只需查找一下即可。另一方面,尝试从头开始编写网络加密的实现只是为了下载一些网页,这就像试图建造一座摩天大楼,因为你的花园小屋不够大。这不是出于好奇,你打算在一个下午做的事情。非常感谢@Evert。实际上,我正试图通过C发送HTTP请求。因为我无意中发现了通过C代码回复的状态代码301,所以我冲向
netcat
模拟请求,看看我是否在C中出错。当我在
netcat
中也获得了完全相同的结果时,我就这样做了。但是我也会给
curl
打一针。