Tomcat 8.5.13禁用SSL后仍有HTTP请求访问HTTPS地址,求技术建议
结合你提到的Tomcat 8.5.13 + Java 8 + MSSQL环境,以及已经在server.xml禁用SSL配置但仍出现HTTP请求访问HTTPS地址的情况,我整理了几个针对性的排查和解决方向:
排查应用内部的硬编码URL
最常见的原因是代码里直接写死了HTTPS地址,比如接口调用、页面跳转链接、静态资源(CSS/JS/图片)的引用路径。建议全局搜索项目代码中的https://字符串,把这些硬编码的地址改成相对路径、HTTP协议地址,或者通过配置文件统一管理URL前缀,避免硬编码。检查Tomcat的重定向/安全约束配置
即使你禁用了SSL,之前可能配置过强制HTTPS的规则:- 查看
web.xml里是否存在安全约束配置:
如果有,把<security-constraint> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>transport-guarantee的值改成NONE,或者直接删除整个安全约束块。 - 检查
server.xml中是否配置了RewriteValve,看看规则里有没有自动跳转到HTTPS的逻辑,这类规则也需要移除或修改。
- 查看
验证客户端/浏览器缓存影响
部分客户端浏览器会缓存之前的HTTPS跳转规则,导致即使服务器端禁用了HTTPS,客户端仍会自动发起HTTPS请求。可以让测试人员清除浏览器缓存,或者用隐私模式访问,确认是否还存在这个问题。排查前端代理/负载均衡配置
如果你的Tomcat前端部署了反向代理(比如Nginx、Apache HTTP Server)或负载均衡设备,这些设备可能配置了强制HTTPS的跳转规则。比如Nginx里的return 301 https://$host$request_uri;这类配置,会直接把HTTP请求重定向到HTTPS,需要检查并修改代理服务器的规则。开启Tomcat访问日志定位请求来源
可以在server.xml中启用访问日志,通过日志分析这些HTTPS请求的来源IP、请求路径、User-Agent等信息,帮助定位请求发起方:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />查看日志中的
%r字段,确认是否真的有请求访问HTTPS URL,还是日志记录的异常情况。
内容的提问来源于stack exchange,提问作者Pradeep Pydi




