我正在学习一些网络知识,并且在第一个练习中遇到了问题:
我应该使用telnet将基本的HTTP GET请求发送到httpbin.org。
这是我输入的内容:
$ telnet www.httpbin.org 80
Trying 23.23.171.5...
Connected to www.httpbin.org.herokudns.com.
Escape character is '^]'.
GET /ip HTTP/1.0
这就是我得到的:
HTTP/1.1 400 Bad Request
Server: Cowboy
Date: Tue, 09 Jan 2018 20:06:36 GMT
Content-Length: 0
我究竟做错了什么?
问题是在需要HTTP 1.1(并且Host:
标头是HTTP 1.1的强制性部分)的服务器上使用HTTP 1.0 ,这可能是因为它可能是在一个IP地址上对多个网站进行虚拟托管。也许它位于HTTP负载平衡器或反向代理的后面,而该负载或反向代理基本上在做相同的事情:在一个IP地址和端口后面支持多个单独的Web服务器域名。
这对我有用:
$ telnet www.httpbin.org 80 正在尝试23.23.171.5 ... 已连接到www.httpbin.org.herokudns.com。 转义字符为'^]'。 GET / ip HTTP / 1.1 主机:www.httpbin.org
……我回来了……
HTTP / 1.1 200 OK 连接:keep-alive 服务器:meinheld / 0.6.1 日期:Tue,09 Jan 2018 22:01:19 GMT 内容类型:application / json Access-Control-Allow-Origin:* Access-Control- Allow-Credentials:true X-Powered-By:Flask X-Processed-Time:0.000454902648926 Content-Length:32 通过:1.1 vegur { “ origin”:“ [我的IPv4地址已编辑]” } ^] telnet> close $
请注意,连接保持打开状态,我不得不退出telnet>
提示关闭窗口。我可以通过Connection: close
在请求中添加标头来避免这种情况。
如果您尝试使用带有Host:
标头的HTTP / 1.1,但它仍然对您不起作用,请确保您的telnet客户端发送的是CRLF,而不仅仅是回车符或换行符。确保在最后一行之后以一个额外的CRLF结束请求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句