HTTP GET请求中是否需要“主机”?

HTTP GET请求中是否需要“主机”?,http,get,netcat,Http,Get,Netcat,以下示例显示必须指定Host:。这是由GET请求的HTTP协议规定的,还是仅仅是GET的非标准特性?谢谢 $netcat--版本 netcat(GNU netcat)0.7.1 版权所有(C)2002-2003 Giovanni Giacobbi 在法律允许的范围内,本计划不提供任何担保。 您可以根据以下条款重新分发本程序的副本: GNU通用公共许可证。 有关这些事项的更多信息,请参阅名为COPYING的文件。 鸟类研究的原始想法和设计, 由乔瓦尼·贾科比撰写。 $sed's/$/\r/g'简短

以下示例显示必须指定
Host:
。这是由GET请求的HTTP协议规定的,还是仅仅是GET的非标准特性?谢谢

$netcat--版本
netcat(GNU netcat)0.7.1
版权所有(C)2002-2003 Giovanni Giacobbi
在法律允许的范围内,本计划不提供任何担保。
您可以根据以下条款重新分发本程序的副本:
GNU通用公共许可证。
有关这些事项的更多信息,请参阅名为COPYING的文件。
鸟类研究的原始想法和设计,
由乔瓦尼·贾科比撰写。

$sed's/$/\r/g'简短回答取决于协议

在实践中,如果您没有指定可能发生的“主机”(取决于web服务器是否配置为nginx/apache/hiawatha等),您可以从默认vhost或配置为从IP接收/发送请求的主机获取内容

您可以使用以下方法进行测试:

 echo -en "GET / HTTP/1.0\n\n\n" | nc stackoverflow.com 80
这可能是输出:

HTTP/1.1 500 Domain Not Found
Server: Varnish
Retry-After: 0
content-type: text/html
Cache-Control: private, no-cache
connection: keep-alive
X-Served-By: cache-hhn1546-HHN
Content-Length: 220
Accept-Ranges: bytes
Date: Sat, 07 Apr 2018 20:45:56 GMT
Via: 1.1 varnish
Connection: close

<html>
<head>
<title>Fastly error: unknown domain </title>
</head>
<body>
<p>Fastly error: unknown domain: . Please check that this domain has been added to a service.</p>
或者使用HTTP/1.1
(需要指定主机)

您将看到/得到响应:

HTTP/1.1 301 Moved Permanently
...

(谷歌的查询结果是:“http请求是必须的主机名”)需要澄清的是:http 1.0请求不需要它。HTTP 1.1请求没有主机,如果请求URI没有主机,则该值应保留为空。(见第14.23节)阅读。这个规格。
 echo -en "GET / HTTP/1.0\nHost: stackoverflow.com\n\n" | nc stackoverflow.com 80
echo -en "GET / HTTP/1.1\nHost: stackoverflow.com\n\n" | nc stackoverflow.com 80
HTTP/1.1 301 Moved Permanently
...