2017-09-25 9 views
0

akka-httpを使用して内部エンドポイントに対して簡単なPOST要求を行うときに問題が発生します。コードのこの部分を実行した場合:Akka-http POSTの結果は「サーバー側のHTTPバージョンはサポートされていません」

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: The server-side HTTP version is not supported 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)

私は、魔法のように成功した(そしてHTTP/1.1と応答する)カールを使用して、エンドポイントに同じクエリを実行しました。 HttpRequest(...)はデフォルトでprotocol = HttpProtocols.`HTTP/1.1`を使用しているので、どういうわけかakka-httpとこの他のエンドポイントの間で交渉されたHTTPバージョンが間違っているという疑いがあります。

akka-httpがPOSTを実行するときに何とかHTTPバージョンを適用できますか?またはakka-httpはcurlがなぜPOSTに成功するのかについての他の手掛かりはありませんか?問題はGETではなくPOSTを実行しているときにのみ発生することに注意してください。

答えて

0

問題は非常に奇妙な解決策でした。アドレスhttp://foo/bar:8080(内部DNSリゾルバを使用)を介してもう一方のエンドポイントに直接接続する代わりに、https://our-domain.com:443を使用して間接的にエンドポイントに接続しました。その場合、すべてが期待どおりに機能しました。 akka-httpはTLDが存在しないために何らかの形で問題を抱えているようです。

+0

私は同じ問題を抱えています、あなたは精緻化できますか?あなたの答えでは、両方に「直接接続する」というフレーズを使用します。私は 'localhost'が動作し、TLDを持っていないことを知っています。あなたはどうやってそれを説明しますか? –

関連する問題