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

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

DDD
DDDオリジナル
2024-11-22 22:38:24774ブラウズ

Why Does My Go Web Server Redirect POST Requests to `/myurl` to `/myurl/`?

Go Web サーバー: POST リクエストでの謎のリダイレクト

特定の URL (/myurl) に POST リクエストを行うと、開発者は予期しないエラーに遭遇します動作: リクエストはサーバーに直接到達しません。代わりに、301 リダイレクト応答が受信され、その後、サーバーによって処理されるセカンダリ GET リクエストが受信されます。

サーバー コードを調査すると、「/myurl/」パスのハンドラーが次の方法で登録されているようです。 http.HandleFunc("/myurl/", PHandler)。ただし、ブラウザが POST リクエストを行うと、(末尾のスラッシュなしで) "/myurl" に転送されます。

この問題を理解する鍵は、Go の http パッケージのデフォルトの動作にあります。 http.ServeMux タイプのドキュメントによると、末尾のスラッシュなしでリクエストが到着した場合、登録されたパスの末尾のスラッシュはリダイレクトをトリガーします。これは、リクエストが適切なハンドラに確実にルーティングされるようにすることを目的としています。

この場合、ハンドラは「/myurl/」に登録されているため、末尾のスラッシュのない「/myurl」に対するブラウザのリクエストは次のようになります。末尾にスラッシュを付けて「/myurl/」にリダイレクトします。これは、リクエストがサーバーに直接到達しないという観察結果を説明しています。

この問題を解決するには、開発者にはいくつかのオプションがあります。

  1. ブラウザを末尾のスラッシュで正しいパスに誘導します。 /myurl/".
  2. http.HandleFunc("/myurl", など) 末尾のスラッシュなしで特定のパスのハンドラーのみを登録します。 PHandler).
  3. 両方のパスのハンドラーを登録し、末尾のスラッシュの有無にかかわらずリクエストを許可します。

これらのソリューションのいずれかを実装することで、開発者は予期しないリダイレクト動作を排除し、 POST リクエストは Go Web サーバーによって期待どおりに処理されることを確認します。

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

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