http请求头中的host是什么意思

Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。

虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。

举个栗子,有一台 ip 地址为 61.135.169.125 的服务器,在这台服务器上部署着谷歌、百度、火狐的网站。为什么我们访问 https://www.google.com 时,看到的是 Google 的首页而不是百度或者淘宝的首页?原因就是 Host 请求头决定着访问哪个虚拟主机。


在一个的服务器中,可能拥有多个 Host 的应用服务,此时仅仅通过 IP 无法访问到对应的服务,可通过 Host 来进行定位。

Host 是唯一客户端必须携带的请求头,如果缺失了该请求头则会返回 400 状态码。在 HTTP/2 以及 HTTP/3 中,以一个伪头 :authority 代替。

如果通过 curl 模拟 Host,可通过请求 IP 地址,并明确指定 Host 头部。

# 请求成功
$ curl http.devtool.tech    #ping也可以直接得到其ip

# 获取到其 IP 地址
$ dig +short http.devtool.tech
76.223.126.88

# 直接请求 IP,导致找不到该应用
$ curl 76.223.126.88

# 请求成功
$ curl 76.223.126.88 -H "Host: http.devtool.tech"

centos安装dig

yum install bind-utils

那为什么不用IP+端口呢?
因为IP+端口区分的是进程(服务), 而 Host区分的是目录(网站)
我们用80端口访问1.1.1.1的apache服务,而1.1.1.1内部有很多目录(网站) 

猜你喜欢

转载自blog.csdn.net/ThinPikachu/article/details/127326653