Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。
虚拟主机( virtual hosting )即共享主机( shared web hosting ),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。
举个栗子,有一台 ip 地址为 61.135.169.125 的服务器,在这台服务器上部署着谷歌、百度、淘宝的网站。为什么我们访问 https://www.google.com 时,看到的是 Google 的首页而不是百度或者淘宝的首页?原因就是 Host 请求头决定着访问哪个虚拟主机。
网上说的这个说法对吗?我们发送一个请求不是最后都被解析成 ip:端口,这样不就能区分同一台机器的不同服务,为什么要这个 host 字段呢?谷歌也查过了,看不太懂这个的意思
我现在的理解是相当于可以同一个 ip 和同一个端口号,部署不同的网站这样子?
1
Telegram 2020-04-14 21:08:14 +08:00 1
虚拟主机,一个 IP 上成百上千个网站,但是 http 服务,默认都是 80 端口。
没有 host,服务端怎么知道你到底访问的是哪个网站。。。 你自己说的也有道理,但是你不能让每个网站都是独立端口吧?? aaa.com:8081 bbb.com:8082 这种带端口访问,你不觉得丑吗 |
2
Morge 2020-04-14 21:26:00 +08:00
The "Host" header field in a request provides the host and port information from the target URI, enabling the origin server to distinguish among resources while servicing requests for multiple host names on a single IP address.
|
3
Morge 2020-04-14 21:29:16 +08:00
详情请见 RFC7230 第 5.4 节
|
4
liuxey 2020-04-14 21:37:12 +08:00
|
5
heyjei 2020-04-14 21:48:27 +08:00
首先你要懂得网络分层的原理,在我们 TCP/IP 网络模型中,分四层:物理层、网络层、传输层、应用层。
传输层: 在我们这里传输层用的是 TCP 协议,如果浏览器要和服务器的 WEB 服务器通信,首先要在传输层上建立连接并传输数据,这里他们需要通过 IP:Port <--> IP:Port 这种四元组来定位对方的位置。这时候是没有域名的概念的,浏览器要和对方的服务器通信必须把域名通过 DNS 协议解析成 IP 地址; 应用层: 这里应用层的协议是 HTTP 或者 HTTPS,应用层的数据是通过 TCP 连接传输过去的。WEB 服务器收到 HTTP 协议的数据后,就会解析 Host 头部信息,判断这个 HTTP 请求应该让谁来处理(在我们这里是访问对应域名的网站 /虚拟主机)。 |
6
elfive 2020-04-14 21:54:37 +08:00 via iPhone
@heyjei host 是纯的应用层的东西,和你那几个层完全不相关。
它就是一楼所说的,虚拟主机。是 HTTP1.1 版本提出来的东西,是 HTTP1.1 版本之后协议规定所必须要添加的内容。 |
7
dandycheung 2020-04-14 22:01:50 +08:00 via iPhone
你最后理解的就对。
|
8
liuzhiyong 2020-04-14 23:03:12 +08:00
你说的“同一个 ip 和同一个端口号,部署不同的网站”就是正确答案。
|
9
dobelee 2020-04-14 23:43:34 +08:00 via iPhone
一看楼主就暴露年龄了,十几年前云主机还不流行,都是虚拟主机的天下,很多人共用一个 IP,就靠 host 绑定域名来路由。
|
10
shansing 2020-04-15 00:01:41 +08:00
你的理解是对的,网上的说法也没错,就是有点误导。它假设一台服务器上部署着谷歌、百度、淘宝的网站,还用域名 www.google.com 举例子,我们知道基本不符合现实。
另外要注意的是,确实(一部分)网址会解析成“解析成 ip:端口”,但当你不(显式)指定端口的时候,总是默认端口,即 80 ( HTTP )或 443 ( HTTPS )。 |
13
msg7086 2020-04-15 05:39:52 +08:00 via Android
> 我们发送一个请求不是最后都被解析成 ip:端口
当然不是。你的请求就是你的请求,发出去是什么样,别人收到就是什么样。ip 只是从域名做解析,和你报文里写的内容是无关的。 |