Host 头与虚拟主机
同一个 IP 上可以承载多个站点,区分靠的就是请求里的 Host 头(加密流量里则是握手中的服务器名称指示)。虚拟主机的匹配规则把请求分发到对应站点,Host 缺失、写成 IP 或与预期域名不符时,就会命中默认站点或返回错误页。对加密流量还要留意 Host 与握手域名是否一致:不同网关按不同字段路由,两者不一致时会得到「部分请求正常、部分异常」的表现。
基本信息
| 适用平台 | Wireshark / tshark,HTTP/1.1 用 Host 头,HTTP/2 用 :authority 伪头 |
|---|---|
| 过滤字段 | http.host、tls.handshake.extensions_server_name |
| 路由依据 | 明文流量按 Host,加密流量常按握手域名,部分网关两者都看 |
| 常见现象 | 直连 IP 命中默认站点或返回错误页 |
典型使用场景
- 同一台服务器上多站点表现不一致,核对请求命中了哪个站点
- 排查「证书告警但某些客户端正常」这类不一致现象
- 验证负载均衡或网关的路由依据是域名还是地址
- 确认直连 IP 测试与域名测试结果差异的原因
- 排查 API 网关按域名分流时的错误命中
- 为域名迁移或证书更换提供验证依据
比对要点
比对要点
http.host contains "example.com" # 明文请求的域名
tls.handshake.extensions_server_name == "api.example.com"
# 抓包中比对: Host 头 与 握手中的服务器名称指示
# 两者不一致时,部分网关按前者路由、部分按后者
ts -T fields -e http.host -e ip.dst # 统计各 Host 的分布观察项逐项读法
| 观察项 | 含义 | 异常表现 |
|---|---|---|
| Host 头取值 | 请求声明的目标站点 | 为空或写 IP 会命中默认站点 |
| 握手域名 | 加密流量的目标站点标识 | 与 Host 不一致会引发路由歧义 |
| 响应 Server 头 | 响应由哪类组件生成 | 与预期组件不符说明命中错误站点 |
| 证书域名 | 服务端出示的域名范围 | 与请求域名不符即触发校验告警 |
HTTP/2 把域名放在 :authority 伪头里,用 http.host 过滤可能取不到值,需要按版本换用对应字段。
直接访问 IP 时把 IP 当作域名发送属于正常行为,此时返回默认站点或错误页是预期结果,不是故障。