Nic*_*las 2 java spring spring-mvc spring-boot
我有 2 个使用 Spring Tool Suite“Spring Starter Project”创建的项目:
第一个项目: Spring Boot 1.3.7(发布)+ Web
第二个项目: Spring Boot 1.4.0(发布)+ Web
我@SpringBootApplication用以下代码替换每个项目的类:
@SpringBootApplication
@RestController
public class TestWebApplication {
public static void main(String[] args) {
SpringApplication.run(TestWebApplication.class, args);
}
@RequestMapping("/hello")
public String sayHello() {
return "hello!";
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用GET /hello每个服务器时,我得到以下响应:
第一个项目 (1.3.7):状态 200 (无原因)
第二个项目(1.4.0):状态 200 OK
这是一个错误还是我错过了什么?
此外,我无法为 1.4.0 项目设置原因。
行为的变化是由于使用 Tomcat 8.5 的 Spring Boot 1.4 和使用 Tomcat 8.0 的 Spring Boot 1.3 造成的。Tomcat 8.5 不发送原因短语。
严格来说,原因短语不是必需的。在RFC 7230中,原因短语定义为:
reason-phrase = *( HTAB / SP / VCHAR / ons-text )
Run Code Online (Sandbox Code Playgroud)
其中*表示零个或多个。换句话说,原因短语为空是合法的。
Tomcat 8.5 利用了这一点,并通过删除原因短语来节省一些带宽。如果这给您的客户带来了问题,那么它可能不符合规范,因为上面链接的 RFC 部分是这样说的:
Reason-phrase 元素存在的唯一目的是提供与数字状态代码相关的文本描述,主要是出于对更频繁地与交互式文本客户端一起使用的早期 Internet 应用程序协议的尊重。客户端应该忽略原因短语内容。
您还没有说缺少原因短语是否会导致问题。如果不是,那么你最好的做法就是不要担心并继续前进。如果您确实想出于某种原因保留原因短语,那么切换到 Undertow 或 Jetty 是您最好的选择。
| 归档时间: |
|
| 查看次数: |
1784 次 |
| 最近记录: |