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

Jac*_*erk 2 java http

我正在与一个向我们的应用程序发送HTTP-GET请求的系统集成.使用Jetty,花了几分钟时间把东西打成一团.

我用curl测试它(在请求中有必要的逃逸)并且一切都很美好.我按要求回复了回复:

$ curl http://localhost:9100?field1=value1\&field2=value2\&field3=value3
Run Code Online (Sandbox Code Playgroud)

计算机上的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: */*
Run Code Online (Sandbox Code Playgroud)

然而,生活从未如此简单.当我部署它以便我们实际上可以开始与真实系统集成时,我的代码中的处理程序甚至都没有被调用.Jetty立即回应"HTTP/1.1 400 Bad Request".TCP转储显示以下内容:

GET ?field1=value1&field2=value2&field3=value3 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

就是这样......没有标题信息,就像上面那样.

我现在的问题是上面的请求是否真的有效.是否需要斜线?是否必须使用任何标题条目?

有任何想法吗?这是否意味着我必须重新设计轮子以使其工作?


编辑:

我尝试使用telnet进行连接.在GET请求某些Web服务器之后,似乎确实需要/.但是,似乎它们之间的处理方式不同.Jetty抱怨说,谷歌运行的网络服务器抱怨...但是Apache是​​一个很好的例子.似乎不需要任何标题信息.

Bur*_*lid 7

RFC 2616提供了所有细节:

3.2.2

如果URL中不存在abs_path,则在用作资源的Request-URI时必须以"/"形式给出(第5.1.2节).

14.23

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