这是一个有效的HTTP get请求吗?

时间:2012-08-23 09:25:51

标签: java http

我正在与向我们的应用程序发送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请求某些Web服务器之后,似乎确实需要/。但是,似乎它们之间的处理方式不同。 Jetty抱怨说,谷歌运行的网络服务器抱怨...但是Apache是​​一个很好的例子。似乎不需要任何标题信息。

3 个答案:

答案 0 :(得分:7)

RFC 2616提供了所有细节:

3.2.2

  

如果URL中没有abs_path,则必须以“/”表示   当用作资源的Request-URI时(第5.1.2节)。

14.23

  

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

答案 1 :(得分:2)

根据HTTP1.1 specificationHost:标题字段是必填字段。 不需要前导斜杠。事实证明也需要前导斜杠。

答案 2 :(得分:0)

我看不出它有什么问题 - 不应该要求斜线

我有所纠正,需要削减斜线。