一个 IP 上通常托管多个网站(虚拟主机)。TCP 连接只定位到 IP:端口,服务器要知道客户端想访问哪个站点,只能靠 HTTP 层的 Host 头。HTTP/1.0 时代一个 IP 一个站点所以没有此要求,HTTP/1.1 把 Host 列为必需头——同一台 Nginx 上配置多个 server_name,就是靠匹配 Host 把请求分发到不同站点配置;CDN、负载均衡器同样依赖它路由。
由此引出的几个考点:1)基于域名的虚拟主机 vs 基于 IP/端口的虚拟主机;2)HTTPS 场景下 TLS 握手发生在 HTTP 之前,服务器在握手时就要选对证书——靠的是 TLS 扩展 SNI(Server Name Indication),可以认为 SNI 是 Host 头在 TLS 层的对应物;3)直接访问 IP 时 Host 缺失或为空,命中默认站点,扫描器常这样探测;4)Host 头可被客户端任意伪造,若业务根据 Host 生成密码重置链接等绝对 URL,可能被投毒(Host Header Injection),应使用服务端配置的可信域名。追问方向:HTTP/2 的 :authority 伪头与 Host 的关系、SNI 明文泄露与 ECH 加密。
(约 400 字)