我正在与向我们的应用程序发送 HTTP-GET 请求的系统集成。使用 Jetty,需要几分钟的时间才能将某些东西拍打在一起。
我用 curl 测试了它(在请求中有必要的转义),一切都很顺利。我按要求收到了回复:
$ curl http://localhost:9100?field1=value1\&field2=value2\&field3=value3
机器上的 TCP 转储显示请求通过:
GET /?field1=value1&field2=value2&field3=value3 HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
Host: xxx.xxx.xxx.xxx:9100
Accept: */*
然而,生活从来没有那么简单。当我部署它以便我们可以真正开始与真实系统集成时,我的代码中的处理程序甚至没有被调用。Jetty 立即响应“HTTP/1.1 400 Bad Request”。TCP 转储显示以下内容:
GET ?field1=value1&field2=value2&field3=value3 HTTP/1.1
就是这样......没有标题信息,就在上面。
我现在的问题是上面的请求是否真的有效。斜线是必需的吗?是否有任何标题条目是强制性的?
有任何想法吗?这是否意味着我必须重新设计轮子才能使其正常工作?
编辑:
我尝试使用 telnet 连接。在某些网络服务器的 GET 请求之后,似乎确实需要 / 。但是,似乎它们之间的处理方式不同。码头抱怨,谷歌运行的网络服务器抱怨......但是Apache是一个很好的例子。似乎不需要任何标题信息。