【问题标题】:Spring boot return 'HTTP/1.1 200' not 'HTTP/1.1 200 OK'春季启动返回“HTTP/1.1 200”而不是“HTTP/1.1 200 OK”
【发布时间】:2018-09-11 15:01:10
【问题描述】:

客户端在收到 HTTP 响应时期望“200”之后的“OK”为:

HTTP/1.1 200 正常

如果没有“OK”,客户端将无法正确解析 HTTP 响应。如何解决问题


我已经解决了

@Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return container -> { if (container instanceof TomcatEmbeddedServletContainerFactory) { TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory)container; tomcat.addConnectorCustomizers((TomcatConnectorCustomizer)connector -> { ProtocolHandler protocolHandler = connector.getProtocolHandler(); if (protocolHandler != null && protocolHandler instanceof AbstractHttp11Protocol) { AbstractProtocol protocol = (AbstractProtocol)protocolHandler; // fix tomcat 8.5 can't send reason phrase protocol.setSendReasonPhrase(true); } }); } }; }

【问题讨论】:

  • 您可以从返回的响应中找到所需的子字符串。
  • 不知道怎么办
  • 使用更好的客户端?
  • 不,我需要确定返回
  • 我无法复制它。运行curl -D - <your URL> 并检查输出。我在 Spring Boot(版本 1.4.2.RELEASE)应用程序中得到 HTTP/1.1 200 OK

标签: java http spring-mvc tomcat spring-boot


【解决方案1】:

HTTP 规范 (RFC 2616 Section 6.1) 规定1“原因短语”由零个或多个字符组成。它还说:

这里列出的原因短语只是 建议——它们可能会被当地的同类产品取代,而无需 影响协议。

换句话说,HTTP 规范允许服务器对原因短语使用不同的文本,或者完全忽略它。

最新版本的 HTTP 规范 (RFC 7230 Section 3.1.2) 对客户端行为更加明确。

reason-phrase 元素的存在唯一目的是提供一个 与数字状态代码相关的文本描述,主要是 出于对早期互联网应用协议的尊重 更常用于交互式文本客户端。客户应该 忽略原因短语内容。

如果您的客户端依赖于任何响应的原因短语的特定值,则它是不可互操作的,并且可以说是损坏的。

在这种情况下,您遇到过 Tomcat 的开发人员决定省略原因短语 .... 可能是因为它们是多余的。虽然您可以在 Tomcat 8.5 中解决此问题,但从 Tomcat 9 开始,您将别无选择,只能将您的客户端代码修复为不依赖于原因短语。

如果您打算将来继续使用 Tomcat 服务器,您应该修复或更换客户端。


1 - RFC 7231 中的措辞几乎相同。

【讨论】:

    【解决方案2】:

    https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

    发送原因短语

    如果您希望在响应中包含原因短语,请将此属性设置为 true。默认值为 false。

    注意:此选项已弃用,将在 Tomcat 9 中删除。将不会发送原因短语。

    讨论:https://bz.apache.org/bugzilla/show_bug.cgi?id=60362

    我肯定会尝试修复/更改客户端。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 2012-03-07
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多