我已经用Jetty取代了Tomcat。现在,对于第三方系统发送的请求,我有400个http错误代码。如我所见,与curl
和网络浏览器发送的测试的区别在于http动词中的url:
POST http://10.15.1.9:49302 HTTP/1.0
Host: 10.15.1.9
Content-Type: text/xml
Content-Length: 71065
User-Agent: hpost/0.1
Pragma: no-cache
Accept: */*
此请求无效,但使用相对URL(例如
POST / HTTP/1.0
)的发布效果很好。谁错了?我无法更改第三方系统,因此,可以让码头接受此类请求吗?我试过了Jetty v6.1.26,v7.6.4和v8.1.4-工作原理相同。
好的,我认为原因是网址后缺少尾部斜杠,
POST http://10.15.1.9:49302/ HTTP/1.0
工作正常。是否有人知道是码头问题还是客户端发送了格式错误的网址?
最佳答案
虽然HTTP规范RFC-2616表示请求行的server must accept absoluteuri's,但这通常仅用于代理请求。
对于Jetty而言,请求行POST http://10.15.1.9:49302 HTTP/1.0
被视为HTTP / 1.0请求,并且属于RFC-1945 for Request Line URIs规则,该规则规定absoluteuri始终是代理请求。