http パッケージを使用して Go で単純な HTTP サーバーを実装する場合、リクエストの値が空白になることがあります。開発中の URL.Host と request.URL.Scheme。これらのフィールドがリクエストに関する情報を提供することを期待しているため、これは複雑になる可能性があります。この動作が発生する理由を調査し、欠落しているデータを取得する方法を調べてみましょう。
サンプル コードでは、リクエスト メッセージは相対パスを通じて受信されます。これは、クライアントの HTTP リクエストには、明確に指定されたホストとスキームを含む絶対 URL が含まれていないことを意味します。代わりに、クライアントは相対パスを使用し、これらのフィールドを空白のままにします。
ただし、リクエストが HTTP プロキシ経由または絶対 URL を使用して行われた場合、request.URL.Host および request.URL.Scheme は次のようになります。プロキシまたはクライアントがこの情報を明示的に提供するため、データが設定されます。
これを確認するには、netcat などのツールを使用して、さまざまなリクエスト形式でサーバーをテストします。相対パスを使用してリクエストを送信すると、空白のホスト フィールドとスキーム フィールドが生成されますが、絶対 URL を使用するとそれらのフィールドに値が入力されます。
request.URL.Host のみに依存する代わりに、ホスト フィールドに直接アクセスできます。 http.Request 構造体から取得します。これにより、リクエストで相対パスが使用されるか絶対パスが使用されるかに関係なく、ホスト情報が提供されます。
さらに、ハンドラーによって受信されたリクエストが絶対パスであるかどうかを確認できます。 request.URL 構造体の IsAbs() メソッドを使用した相対。これにより、相対パスを使用したリクエストを適切に処理できるようになります。
以上がMy Go HTTP 開発サーバーで request.URL.Host と request.URL.Scheme が空白になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。