開発サーバーでの相対 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 サイトの他の関連記事を参照してください。