我正在与向我们的应用程序发送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是一个很好的例子。似乎不需要任何标题信息。
答案 0 :(得分:7)
RFC 2616提供了所有细节:
如果URL中没有abs_path,则必须以“/”表示 当用作资源的Request-URI时(第5.1.2节)。
客户端必须在所有HTTP / 1.1请求中包含Host头字段 消息。
答案 1 :(得分:2)
根据HTTP1.1 specification,Host:
标题字段是必填字段。 不需要前导斜杠。事实证明也需要前导斜杠。
答案 2 :(得分:0)
我看不出它有什么问题 - 不应该要求斜线。
我有所纠正,需要削减斜线。