ホームページ >バックエンド開発 >Golang >My Go 開発サーバーで r.URL.Host と r.URL.Scheme が空になるのはなぜですか?

My Go 開発サーバーで r.URL.Host と r.URL.Scheme が空になるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 18:56:10887ブラウズ

Why are r.URL.Host and r.URL.Scheme Empty in My Go Development Server?

開発サーバーでの相対 URL アクセス

質問:

Go HTTP サーバーを実行する場合開発中、r.URL.Host と r.URL.Scheme が受信に対して空なのはなぜですかリクエスト?

回答:

r.URL にホストとスキームの情報が存在しないのは、開発中にサーバーにアクセスするときに相対 URL を使用したことが原因です。相対 URL は、絶対 URL とは異なり、ホストやスキームを指定しません。

相対リクエスト:

通常、Web ブラウザは次のような絶対リクエストを発行します。

GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080

ただし、ローカル開発サーバーに直接アクセスする場合、ブラウザは相対サーバーを使用する場合があります。 request:

GET / HTTP/1.1
Host: localhost:8080

この相対リクエストでは、パスのみが指定され、ホストとスキームは省略されます。その結果、サーバーがそのようなリクエストを受信すると、r.URL.Host と r.URL.Scheme は空になります。

ホスト情報へのアクセス:

取得するにはこの状況でのホスト情報には、http.Request の r.Host 属性を使用できます。 struct.

host := r.Host

絶対リクエスト (オプション):

絶対リクエストを常に受信できるようにするには、HTTP プロキシを使用できます。プロキシを使用する場合、プロキシは絶対リクエストをサーバーに転送し、r.URL.Host と r.URL.Scheme には期待値が含まれます。

IsAbs() Check:

r.URL の IsAbs() メソッドを使用して、リクエスト内の URL が絶対的であるか相対的であるかを確認することもできます。構造体:

isAbsoluteURL := r.URL.IsAbs()

以上がMy Go 開発サーバーで r.URL.Host と r.URL.Scheme が空になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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