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

WBOY
リリース: 2024-02-10 20:39:08
転載
985 人が閲覧しました

如何解决杜松子酒中的“标头已写入。想要用 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!