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

Spring Boot返回HTTP/1.1 200而非200 OK致客户端解析失败如何修复?

解决Spring Boot返回HTTP响应缺少状态码原因短语(如"OK")的问题

这问题我之前帮同事排查过类似的,核心原因是Tomcat在较新版本里默认会省略HTTP响应状态码的原因短语(就是你提到的"OK"),虽然HTTP/1.1规范允许这么做,但有些严格遵循早期规范或实现不够灵活的客户端会因此解析失败。下面给你完整的修复方案:

针对Spring Boot 1.x版本的配置

你给出的代码已经有了雏形,我帮你补全并解释:

import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatHttpResponseConfig {

    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return container -> {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
                // 添加连接器自定义器,强制开启原因短语发送
                tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
                    connector.setAttribute("sendReasonPhrase", true);
                });
            }
        };
    }
}

针对Spring Boot 2.x及以上版本的配置

Spring Boot 2.x重构了Web容器相关的API,类名有所变化,适配代码如下:

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatHttpResponseConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> containerCustomizer() {
        return factory -> {
            factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
                // 强制Tomcat发送状态码原因短语
                connector.setAttribute("sendReasonPhrase", true);
            });
        };
    }
}

原理说明

Tomcat从8.5.x版本开始,默认将sendReasonPhrase属性设置为false,目的是减少响应报文的大小。但通过显式设置该属性为true,Tomcat就会在响应状态行中带上对应的原因短语(比如200对应"OK",404对应"Not Found"等),满足你的客户端解析要求。

验证方法

启动应用后,你可以用curl命令测试:

curl -v http://localhost:8080/your-api-path

在输出的响应头部分,你应该能看到HTTP/1.1 200 OK的完整状态行,而不是之前的HTTP/1.1 200。

如果你的应用使用的是其他Servlet容器(如Jetty、Undertow),配置方式会有所不同,但根据你给出的代码片段,这里默认你使用的是Tomcat容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:33:42