多层基础设施架构中HTTP请求的HOST header取值应为什么?
Host请求头取值问题解答
Host头的最终取值完全取决于请求链路中所有中间节点的处理策略,没有统一固定答案,分两种最常见的场景:
- 若两个负载均衡、监控服务都配置为透传原始请求的Host头,你调用
HttpServletRequest.getHeader("host")获取到的是互联网用户发起请求时携带的原始Host值,也就是第一个负载均衡对外暴露的公网域名/公网IP。 - 若中间节点采用默认反向代理配置,转发请求时会自动修改Host头为下一跳服务的访问地址,那么你最终获取到的是第二个负载均衡转发请求到Servlet容器时设置的Host值,即第二个负载均衡配置的上游Servlet容器的访问地址。
实践建议
生产环境通常会要求整条链路的中间代理节点都添加X-Forwarded-Host请求头,专门用于记录用户发起请求的原始Host值。如果你需要获取用户最初请求的目标域名,优先读取该请求头即可。
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

