You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat7.0非SpringBoot应用GET特定URL返回400配置咨询

问题描述

首次配置负载均衡时遇到健康检查故障:针对特定URL做检测时,部署在Tomcat 7.0容器上的非Spring Boot Java应用未返回有效响应,而是返回400错误状态码,服务实际处于可用状态。
执行如下测试curl命令时,预期返回200状态码:

curl -I --verbose --noproxy * -H Host: -H User-Agent: -H Accept: http://test.company.com:8080/accountBatch/jsf/landingPage.xhtml

实际收到错误响应:

< HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request

未检索到非Spring Boot应用对应的参考配置方案。

故障根因

400错误的核心原因是测试命令和负载均衡检测请求携带了空值Host请求头,触发了Tomcat 7的HTTP请求合法性校验:

  • HTTP/1.1 规范强制要求所有请求必须携带合法的非空Host头,Tomcat 7默认开启严格请求校验,收到空Host头时会直接在容器层返回400响应,不会将请求转发到上层业务应用处理。
  • 测试用curl命令中-H Host:写法就是显式传递了空值的Host头,同理如果负载均衡健康检查规则中未配置正确的Host头,也会触发同样的问题。
  • 额外注意:curl -I参数发送的是HEAD请求而非GET请求,如果后续校验出现405错误,需要调整请求方法。
解决方案

不需要修改业务应用代码,按以下步骤调整即可:

  • 修正测试curl命令,删除空Host头参数,显式传递合法的Host值,示例命令如下:
    curl -i --verbose --noproxy * -H "Host: test.company.com:8080" -H "User-Agent: LB-HealthCheck" -H "Accept: */*" http://test.company.com:8080/accountBatch/jsf/landingPage.xhtml
    
    执行后即可正常收到200响应。
  • 调整负载均衡的健康检查配置:在检测请求的请求头配置项中,填写和访问服务匹配的Host值(即test.company.com:8080,如果是直连后端节点也可以填对应节点的IP+端口),不要留空。
  • 不推荐的兼容方案:如果因特殊场景必须允许空Host头访问,可以修改Tomcat 7配置目录下的conf/server.xml文件,找到对应服务的Connector节点,添加配置requestValidationEnabled="false"关闭严格请求校验,重启Tomcat后生效。该配置会降低Tomcat的请求安全校验能力,非必要不使用。

内容的提问来源于stack exchange,提问作者JCP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:30:52