ホームページ  >  記事  >  バックエンド開発  >  Pin-Gonic がどちらの場合も StatusOk を返すのに、Postman と nginX ではソケットが 502 でハングするのはなぜですか?

Pin-Gonic がどちらの場合も StatusOk を返すのに、Postman と nginX ではソケットが 502 でハングするのはなぜですか?

王林
王林転載
2024-02-09 20:27:09327ブラウズ

为什么我的 Postman 和 nginX 中的 502 上的套接字挂起,而 Gin-Gonic 在这两种情况下都返回 StatusOk?

php エディターの Yuzi が、この記事で誰にでもよくある質問に答えます。「Postman と nginX の 502 のソケットがハングし、どちらの場合も GinGonic が StatusOk を返すのはなぜですか?」 " この質問には、さまざまなネットワーク フレームワークやサーバーの動作の違いが関係しています。その理由を分析し、読者が同様の問題を解決できるように解決策を提供します。

質問の内容

問題を単純化するために、応答が返されるまでに最大 2 分かかる可能性がある非常に長いルートがあります。これが私のサンプル http ハンドラーです:

リーリー

ここで [GET] /health を呼び出すと、route postman が Error: Socket Hanging を返します gin-gonic から応答が返された時点で、## がログに記録されます #200わかりました###:### [GIN] 2024/01/24 - 11:10:58 | 200 | 200 30.084587215s | ::1 |「/health」を取得

今度は、リバース プロキシとして nginX の背後に同じプロジェクトがあるため、サービスが 200 Ok

をログに記録すると、API 応答で 502 nginX エラーが発生します。

問題は

gin-gonic が正常に応答を返したにもかかわらず、クライアント側でエラーが発生するのはなぜですか?この問題はどうすれば解決できますか?

ルーティング タイムアウトに関連していると考えたので、github.com/gin-contrib/timeout

ライブラリを使用しましたが、成功しませんでした。

回避策

gin-gonic

では、

http.ServerWriteTimeoutを設定して、ソケットのハングを防ぐことができます。 または nginx 502。 興味深いことに、タイムアウトしても常に 200 がログに記録されますが、クライアントではエラーが発生します: リーリー

以上がPin-Gonic がどちらの場合も StatusOk を返すのに、Postman と nginX ではソケットが 502 でハングするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。