2

我正在与向我们的应用程序发送 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是​​一个很好的例子。似乎不需要任何标题信息。

4

3 回答 3

7

RFC 2616提供了所有杂项细节:

3.2.2

如果 URL 中不存在 abs_path,则在用作资源的 Request-URI 时必须将其指定为“/”(第 5.1.2 节)。

14.23

客户端必须在所有 HTTP/1.1 请求消息中包含 Host 头字段。

于 2012-08-23T09:31:22.157 回答
2

根据HTTP1.1 规范Host:header 字段是强制性的。不需要前导斜杠。事实证明,前导斜杠也是必需的。

于 2012-08-23T09:31:14.293 回答
0

我看不出它有什么问题——斜线不应该是必需的

我的立场是正确的,斜线是必需的。

于 2012-08-23T09:29:36.370 回答