開発サーバーの URL ホストとスキームの決定: 空白になるのはなぜですか?
相対パスから HTTP サーバーにアクセスする場合、そのまま開発環境ではよくあることですが、特定の URL 属性が空白で表示されることがあります。具体的には、request.URL.Host および request.URL.Scheme は空の値を返す場合があります。
なぜこれが起こるのですか?
相対 HTTP リクエスト。通常、次の場合にブラウザによって発行されます。ローカルでサーバーにアクセスすると、明示的なホストとスキームの情報が不足します。これは、リクエストにこれらの詳細が含まれる HTTP プロキシで使用される絶対 URL とは対照的です。相対リクエストの場合、http.Request.URL オブジェクトでは生の URL のみが使用可能です。
HTTP ホストへのアクセス
HTTP ホストを取得するには、 http.Request 構造体の Host 属性にアクセスできます。これにより、リクエストの Host ヘッダーで指定されたホスト名とポートが提供されます。
相対 URL と絶対 URL の区別
を呼び出すことで、リクエストで相対 URL が使用されているか絶対 URL が使用されているかを判断できます。 http.Request.URL の IsAbs() メソッド。 IsAbs() が false を返す場合、URL は相対的であり、ホストまたはスキーム情報は含まれません。
Netcat を使用した例
違いを示すために、netcat を使用できます。相対パスを使用して HTTP リクエストを送信します。
cat my-http-request-file | nc localhost 8080
my-http-request-file には次の内容が含まれている必要があります。 HTTP リクエストとしてフォーマットされます:
GET / HTTP/1.1 Host: localhost:8080
このリクエストはハンドラーに空の r.URL.Host 値と r.URL.Scheme 値を返します。
以上が相対 HTTP リクエストで request.URL.Host と request.URL.Scheme が空白になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。