我尝试使用端口 80 连接到网站 (www.ucf.edu),并发送 GET 请求,但使用完全相同的方法,我得到的结果与其他学生的结果不一致。在执行此操作之前,我们必须使用 SSH 安全地连接到我们的学校服务器。连接后,我们被指示发送 get 请求“GET /index.html HTTP/1.1”,当我发送此请求时,我得到的结果不一致。
我尝试过在 Windows 上使用 Putty,并在虚拟机上使用 ubuntu 的命令提示符,但都无济于事。
预期结果:
远程登录 www.ucf.edu 80
尝试 10.171.52.44
连接到 www.ucf.edu。
转义字符是‘^]’。
获取/index.html HTTP/1.1\r\n
HTTP/1.1 302 已找到
服务器:Apache
地点:https://www.ucf.edu/index.html
等等等等
实际结果:
远程登录 www.ucf.edu 80
尝试 52.5.147.12...
连接到 edums-dr-alb-211439321.us-east-1.elb.amazonaws.com。
转义字符是‘^]’。
获取/index.html HTTP/1.1\r\n
HTTP/1.1 400 错误请求
服务器:awselb/2.0
日期:2019 年 10 月 3 日星期四 05:49:42 GMT
答案1
你之所以收到此信息是400 Bad Request
因为这实际上是一个错误的请求。
HTTP/1.1 请求至少需要Host: <URL>
下一行中的指定。这是因为当您连接到该特定 IP 地址时,该特定物理服务器可能正在为多个域提供服务;如果您不指定它,服务器就不知道您请求哪个域。因此正确的请求如下:
GET /index.html HTTP/1.1
Host: www.ucf.edu
(后面跟着空行),整个会话如下所示:
artax:~> telnet www.ucf.edu 80
Trying 52.5.147.12...
Connected to educms-dr-alb-211439321.us-east-1.elb.amazonaws.com.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host: www.ucf.edu
HTTP/1.1 301 Moved Permanently
Date: Fri, 04 Oct 2019 07:44:49 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 238
Connection: keep-alive
Server: Apache
Location: https://www.ucf.edu/index.html
Accept-Ranges: bytes
X-Varnish: 2087970732
Age: 0
Via: 1.1 varnish
X-Cache: MISS
X-Varnish-Server: DR-VLAMP-4
<!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://www.ucf.edu/index.html">here</a>.</p>
</body></html>
Connection closed by foreign host.
答案2
对于您来说,www.ucf.edu 解析为不同的 IP 地址(公共互联网,而不是私有的 10.xx.xx.xx 地址)。显然,这是不同的服务器。
您提到您必须先使用 SSH 登录到学校服务器。我推测您应该在连接到学校服务器时从该 SSH 会话中运行 telnet 命令(在这种情况下,您不会在互联网上看到真正的 www.ucf.edu,而是看到使用 10.xx.xx.xx 私有地址的测试环境)。
但是您提到在 Windows 和 Linux 上得到的结果相同,因此我只能假设您在执行此操作时并未登录 SSH 服务器。(如果您已连接到 SSH,则客户端操作系统不会有任何区别。)或者您确实登录了,但再次注销,这是您不应该做的。
所以你最好仔细检查一下说明。因为我敢肯定你错过了一步。或者多走了一步。