ホームページ >バックエンド開発 >Golang >Go Web サーバーが POST リクエストを GET にリダイレクトするのはなぜですか?

Go Web サーバーが POST リクエストを GET にリダイレクトするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 02:13:12565ブラウズ

Why is My Go Web Server Redirecting POST Requests to GET?

Go Web サーバーが POST リクエストを自動的にリダイレクトする

多くの開発者は、Go Web サーバーが自動的に POST リクエストをリダイレクトし、予期せぬリクエストが発生するという問題に遭遇しています。行動。この現象は、サーバーが特定の URL に対する POST リクエストを受信したものの、ステータス コード 301 (Moved Permanently) で応答し、別の URL への後続の GET リクエストがトリガーされた場合に発生します。

根本原因を理解するには、次のことが重要です。 Go の http.ServeMux 型の動作を詳しく調べます。デフォルトでは、リクエストの URL に末尾のスラッシュが含まれている場合、ServeMux はリクエストをサブツリーのルートに自動的にリダイレクトします。たとえば、ハンドラーが「/myurl/」に登録されている場合、「/myurl」へのリクエスト (末尾のスラッシュなし) は「/myurl/」にリダイレクトされます。

この例では、 PHandler は、「/myurl/」へのリクエストを処理するために登録されています。ただし、ユーザーのブラウザは末尾のスラッシュのない「/myurl」にリダイレクトされました。その結果、ServeMux はこの不一致を検出し、正しい URL への 301 リダイレクトを発行し、POST リクエストを GET リクエストに効果的に変換しました。

この問題を解決するには、次の解決策を検討してください。

  • ブラウザがアクセスする URL がハンドラーの登録されたパスと一致することを確認してください。この場合、ブラウザを「/myurl」ではなく「/myurl/」に誘導します。
  • サブツリー ハンドラーは必要なく、特定のパスのハンドラーのみが必要な場合は、そのハンドラーのみを登録します。 "http.HandleFunc("/myurl", PHandler)" など、末尾のスラッシュを除いたパス。
  • 両方を処理するには、両方のパスをハンドラーに登録します。 「/myurl」と「/myurl/」。関数「http.HandleFunc("/myurl/", PHandler)」を使用します。

ブラウザは通常、機密データのセキュリティを維持するため、リダイレクト後に POST リクエストを繰り返さないことに注意してください。

以上がGo Web サーバーが POST リクエストを GET にリダイレクトするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。