Akka-http POST导致"不支持服务器端HTTP版本"

时间:2017-09-25 14:22:53

标签: http curl post akka akka-http

尝试使用akka-http对某个内部端点执行简单的POST请求时遇到问题。当执行这段代码时:

for {
      request <- Marshal(merchantTransactionRequest).to[RequestEntity]
      response <- Http().singleRequest(
        HttpRequest(
          method = HttpMethods.POST,
          uri = "http://foo/bar:8080",
          entity = request.withContentType(ContentTypes.`application/json`)
        )
      )
      ...
} yield ...

我受到以下错误的欢迎:

  

akka.http.scaladsl.model.IllegalResponseException:不支持服务器端HTTP版本       at akka.http.impl.engine.client.OutgoingConnectionBlueprint $ PrepareResponse $$ anon $ 1.onPush(OutgoingConnectionBlueprint.scala:191)   ...

紧接着是以下日志:

  

[0] </10.0.0.135:42610->foo:8080> pushing request to connection: POST bar Strict(508 bytes)

作为调试过程的一部分,我使用curl对端点执行了相同的查询,这完全成功(并以HTTP/1.1响应)。由于HttpRequest(...)默认使用protocol = HttpProtocols.`HTTP/1.1`,因此我怀疑akka-http和其他端点之间协商的HTTP版本不正确。

当akka-http执行POST时,是否有可能以某种方式强制执行HTTP版本?或任何其他线索,为什么curl成功做POST,而akka-http不?请注意,问题仅在执行POST时发生,而不是GET&#39。s。

1 个答案:

答案 0 :(得分:0)

事实证明这个问题有一个非常奇怪的解决方案:我们不是通过地址http://foo/bar:8080(使用我们的内部DNS解析器)直接连接到另一个端点,而是使用{{3}间接连接到端点}。在这种情况下,一切都按预期工作。似乎akka-http因缺少顶级域名而受到某种程度的困扰。