ホームページ >バックエンド開発 >Golang >Go でリクエスト URL スキームを決定するにはどうすればよいですか?

Go でリクエスト URL スキームを決定するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 06:10:031019ブラウズ

How Do You Determine the Request URL Scheme in Go?

Go でのリクエスト URL スキームの決定

Ruby 用の Rack ミドルウェアでは、scheme#request メソッドを使用して現在のリクエスト URL スキームを簡単に取得できます。ただし、Go では http.Request.URL.Scheme フィールドが空の文字列を返すため、開発者は困惑しています。

スキームの公開

Go でリクエスト URL スキームのロックを解除する鍵は、次のとおりです。 HTTP リクエストと HTTPS リクエストの両方を処理する必要があることを認識しています。 http.ListenAndServe() 関数と http.ListenAndServeTLS() 関数の両方を採用することで、両方のプロトコルに対応します。

TLS to the Rescue

HTTPS は HTTP over TLS であり、内部で TLS プロパティを提供します。 *http.TLS 接続に関する情報を開示するリクエスト。このプロパティを調べることで、使用されているプロトコルを識別できます。

  • r.TLS が null でない場合、リクエストは HTTPS 経由で行われました。
  • r.TLS が null の場合、リクエストは HTTP 経由で行われました。

実装

<code class="go">func handler(w http.ResponseWriter, r *http.Request) {
    if r.TLS == nil {
        // the scheme was HTTP
    } else {
        // the scheme was HTTPS
    }
}

func main() {
    http.HandleFunc("/", handler)
    go func() {
        log.Fatal(http.ListenAndServeTLS(":8443", "localhost.crt", "localhost.key", nil))
    }()
    log.Fatal(http.ListenAndServe(":8080", nil))
}</code>

このアプローチにより、リクエストが HTTP か HTTPS かに関係なく確実にシームレスに処理され、リクエストを決定するための信頼できるメカニズムが提供されます。リクエスト URL スキーム。

以上がGo でリクエスト URL スキームを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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