基本的に、HTTP プロキシからではなく HTTP サーバーにアクセスしているため、ブラウザは次のように相対 HTTP リクエストを発行できます。
GET / HTTP/1.1
Host: localhost:8080
(もちろん、サーバーは localhost ポート 8080 でリッスンしていると仮定します)。
ここで、プロキシを使用して上記のサーバーにアクセスしていた場合、プロキシは絶対 URL を使用する場合があります。
GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080
どちらの場合も、Go から得られるのhttp.Request.URL
は (ライブラリによって解析された) 生の URL です。取得している場合は、相対パスから URL にアクセスしているため、URL オブジェクトにホストまたはスキームがありません。
HTTP ホストを取得したい場合Host
は、構造体の属性にアクセスすることをお勧めしますhttp.Request
。http://golang.org/pkg/http/#Requestを参照してください
適切にフォーマットされた HTTP リクエストを使用して、それを検証netcat
できます (上記のブロックをコピーできます。ファイルの後に末尾の空白行があることを確認してください)。それを試すには:
cat my-http-request-file | nc localhost 8080
IsAbs()
さらに、次のメソッドを呼び出して、リクエストで相対 URL を取得するか絶対 URL を取得するかをサーバー/ハンドラーで確認できます。
isAbsoluteURL := r.URL.IsAbs()