我在不同的服务器上使用Tomcat 8.5在一台服务器和Tomcat 7和我有以下球衣资源:
@Path("main")
public class MyResource {
@POST
@Path("path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public PojoResponse sendMailTemplate(PojoRequest paramsMap) throws Exception {
return service.execute(paramsMap);
}
这是注册MyApplication
(extends ResourceConfig
)与@ApplicationPath("root")
当提交使用JMeter的/邮差请求(到/根/主/路径)我得到不一致的HTTP的原因短语
客户端不需要检查或显示Reason-短语。
这不是强制性的协议
这里列出的原因短语是唯一的建议 - 他们可能会通过当地的等价物,而不会影响协议所取代。
我看到一个“有效的” 200 OK的从Tomcat 7服务器的响应:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 32
和一个“无效”的200 200从Tomcat服务器7(相同的请求)的反应:
HTTP/1.1 200 200
Server: Apache
Content-Type: application/json
Content-Length: 32
X-Content-Type-Options: nosniff
X-XSS-Protection: 1
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
当我检查响应我不找到更新原因短语的任何引用,所以应这种不一致被忽略还是可以解决吗?
编辑
我的应用程序还注册JacksonFeature:
register(JacksonFeature.class);
编辑2
其实我发现,我在第二环境额外的jar:
jersey-entity-filtering-2.19
常见的罐子:
jersey-client-2.19.jar
jersey-common-2.19.jar
jersey-container-servlet-2.19.jar
jersey-container-servlet-core-2.19.jar
jersey-guava-2.19.jar
jersey-media-jaxb-2.19.jar
jersey-media-json-jackson-2.6.jar
jersey-server-2.19.jar
jersey-spring3-2.6.jar
编辑3
我发现了一个错误在Tomcat的8.5这话说原因短语被删除
克里斯托弗·舒尔茨:我很惊讶地看到,Tomcat的积极剥离出的原因短语。我起初以为这是简单的Tomcat从被Tomcat生成的每个响应移除的原因短语(例如,一切从DefaultServlet到来,各种内部错误等),但它是由应用程序积极剥离原因短语明确地设定。
迈克尔·奥西波夫:不,这不会发送任何理由短语。只有HTML错误页面。我知道,因为我已经改写了ErrorReportValve最后一次。
编辑4
我找到了相关的问题,但我不完全理解
Tomcat的8.5移除了响应了“HTTP状态原因短语”,所以你会得到HTTP 200,而不是在响应HTTP 200 OK。这有可能是你的观察是从复制的状态代码进入状态原因短语显示软件。
你是如何观察状态代码?您可能会发现,如果你做一个协议痕迹,你会看到,世界上只有被Tomcat / httpd的发送一个状态代码。你确定了“双重身份码”实际上不是一个(正常)状态码和原因短语出现这种情况是相同的文字作为状态代码?
我刚才已经回答了类似的问题(52821653)前两天。
简而言之:HTTP协议的当前版本(HTTP / 2)具有用于原因短语除去支持。
此功能了。不要依赖于它。
UPDATE:
看着
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
和
HTTP/1.1 200 200
Server: Apache
通过默认的当前版本的Tomcat 8.5的HTTP连接器将响应HTTP/1.1 200
(没有理由短语)。见org.apache.coyote.http11.Http11OutputBuffer
。
通过默认的当前版本的Tomcat 8.5的AJP连接将响应HTTP/1.1 200 200
(使用状态代码作为原因短语),因为一些HTTP服务器的限制,。见org.apache.coyote.ajp.AjpProcessor
。
这两种反应都是有效的。
生成的“OK”字符串可以在Tomcat的8.5通过设置来启用sendReasonPhrase="true"
一个连接器。此选项已被弃用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句