Java 这是有效的HTTP get请求吗?

Java 这是有效的HTTP get请求吗?,java,http,Java,Http,我正在与一个向我们的应用程序发送HTTP-GET请求的系统集成。使用Jetty,花了几分钟把一些东西组装起来 我用curl测试了它(请求中有必要的转义),一切都很顺利。我按照要求得到了回复: $ curl http://localhost:9100?field1=value1\&field2=value2\&field3=value3 计算机上的TCP转储显示通过的请求,如下所示: GET /?field1=value1&field2=value2&field3

我正在与一个向我们的应用程序发送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.1400错误请求”。TCP转储显示以下内容:

GET ?field1=value1&field2=value2&field3=value3 HTTP/1.1
就这样。。。没有标题信息,只是上面的

我现在的问题是,上述要求是否确实有效。需要斜杠吗?是否有任何标题条目是强制性的

有什么想法吗?这是否意味着我必须重新设计车轮才能使其工作


编辑:


我试着用telnet连接。对于某些Web服务器,在GET请求之后似乎确实需要/。然而,他们之间的处理方式似乎有所不同。Jetty抱怨,google运行的Web服务器抱怨。。。然而,Apache就是一个很好的例子。似乎不需要任何标题信息。

我看不出有什么问题-不需要斜杠

已更正,斜杠是必需的。

根据,主机:标题字段是必需的。前导斜杠不是必需的。事实证明,前导斜杠也是必需的。

提供了所有杂项详细信息:

如果URL中不存在abs_路径,则必须将其指定为“/” 当用作资源的请求URI时(第5.1.2节)

客户端必须在所有HTTP/1.1请求中包含主机头字段 信息


http://localhost:9100
-斜杠-
?…
?(类似于
http://localhost:9100/?...
)不知道端口,但其余的看起来不错为什么每个
&
之前都有一个\?编辑:嗯。
的格式设置不正确。`
上面的旋度有效,\是在命令行上转义-。你确定吗?HTTP GET请求通常与您可能在浏览器地址栏中键入的内容不同。根据规范,我同意主机:字段。事实上。。。斜杠一定在那里。显然,web服务器忽略了这条规则。我可以在没有标题的情况下远程登录到一些站点并获得结果。似乎每个人都在按照自己的喜好实施标准。这取决于您是否使用
HTTP1.1
1.0
,在
1.0
中,主机
头是不需要的。(感谢Burhan…似乎1.0没有主机很开心:部分。)你们对此有什么建议吗?如果供应商不想解决问题,我该怎么办?Pfff,我唯一能想到的就是写某种代理。这是一个非常基本的问题-你应该强迫供应商解决它。一种选择是编写自己的代理;但这不是一个解决方案,因为您不知道在实现中还有什么其他问题。例如,可能它没有发送相应的
CRLF