ホームページ >バックエンド開発 >Golang >Ginで「ヘッダーが書き込まれました。ステータスコード200を400で上書きしたい」の解決方法

Ginで「ヘッダーが書き込まれました。ステータスコード200を400で上書きしたい」の解決方法

WBOY
WBOY転載
2024-02-10 20:39:081029ブラウズ

如何解决杜松子酒中的“标头已写入。想要用 400 覆盖状态代码 200”

phpエディタZimoは、Ginの「ヘッダーが書き込まれました。ステータスコード200を400に上書きしたい」問題を解決する方法を紹介します。この問題は通常、Web 開発に PHP を使用するときに発生し、Web ページが正しく読み込めなくなる可能性があります。解決策には、コード内の重複出力のチェック、バッファのクリア、サーバー構成のチェックなどが含まれます。適切な手順を実行することで、この問題を簡単に解決し、ページが適切に機能することを確認できます。

質問内容

Gin フレームワークを使用して HTTP リクエストとは独立してレポートを計算しようとしていますが、リクエストがクローズされていない場合はリクエストにも返したいと考えています。まだ。次のコード スニペットは、正常に動作する場合もありますが、「ヘッダーはすでに書き込まれています。ステータス コード 200 を 400 で上書きしたいです。」というエラーがスローされる場合があります。解決策が見つかりません。

リーリー
// router.go
reportRoute.POST("/query", func(c *gin.Context) {
        reporter.ReportInChan <- c
    }) // Unpublish report by id

回避策

以下のハンドラーは、コンテキストをチャネルに送信してから戻ります。ハンドラーが戻ると、リクエストはキャンセルされます。この時点では、受信側のゴルーチンは出力を生成する可能性がまったくないかもしれませんが、場合によっては出力を生成する可能性があります。 Gin フレームワークが応答を書き込んだ後、コンテキストがキャンセルされる前に、受信側の Goroutine が出力の生成を開始すると、上記のエラーが発生します。

リーリー

実際に行う必要があるのは、タイムアウト スキームを実装することです。そのため、リクエスト ハンドラーがタイムアウト前に応答できる場合は、それを出力に書き込んで返します。それ以外の場合は、リクエスト ハンドラーを実行し、おそらく別の API 呼び出しを通じて、呼び出し元に結果を返す別の方法を見つけます。 リーリー

上記のコードは、リクエスト コンテキストからレポート リクエストを作成し、リターン チャネルを作成して、それをレポート プロセッサに送信します。レポート プロセッサが 100 ミリ秒以内に応答した場合、結果を書き込むことができます。それ以外の場合は、結果を別の API で取得できる場所に保存する必要があります。

レポート プロセッサは次のようになります:

リーリー

以上がGinで「ヘッダーが書き込まれました。ステータスコード200を400で上書きしたい」の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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