java - 这是有效的 HTTP get 请求吗?

标签 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 请求之后,似乎/确实是必需的。但是,它们之间的处理方式似乎有所不同。 Jetty 提示,谷歌运行的网络服务器提示......但是 Apache 是一个很好的例子。似乎不需要任何 header 信息。

最佳答案

RFC 2616提供所有杂项细节:

3.2.2

If the abs_path is not present in the URL, it MUST be given as "/" when used as a Request-URI for a resource (section 5.1.2).

14.23

A client MUST include a Host header field in all HTTP/1.1 request messages .

关于java - 这是有效的 HTTP get 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088607/

相关文章:

java - J2ME 中的音频播放器

java - 使用 groupingBy 创建一个以不可变列表为键的 Map

java - 方法 : org. gradle.api.java.archives.internal.DefaultManifest.srcFile() 没有签名

C编写的HTTP服务器在回复后重置连接

javascript - 如何用javascript编写From Upload Stream的请求 header ?

java - 在 Spring URL 中导航

java - Maven:以编程方式获取所有依赖项

javascript - 检测 Rails 中的操作系统和 32 或 64 位处理器

php - EventSource 在第一条消息后断开连接

java - 为什么我收到 http 500 响应?