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

Barbara Streisand
リリース: 2024-11-04 15:24:02
オリジナル
280 人が閲覧しました

How to Determine the Request URL Scheme in Go?

Go でのリクエスト URL のスキームの検索

Ruby/Rack では、現在のリクエスト URL のスキームを取得するのは、スキーム#リクエストメソッド。ただし、Go では、http.Request.URL.Scheme は空の文字列を生成します。

問題の理解

空の文字列の背後にある理由は、Go が両方のサービスの提供をサポートしているためです。デフォルトでは HTTP と HTTPS。 http.ListenAndServe() のみを使用する場合は、HTTP のみを提供します。逆に、http.ListenAndServeTLS() のみを使用すると、HTTPS に制限されます。

解決策: TLS 接続状態の使用

この問題を解決するには、http の TLS プロパティを利用します。リクエスト。このプロパティは *tls.ConnectionState を提供し、リクエストで使用されている TLS に関する情報を明らかにします。 TLS プロパティを確認することで、クライアントが使用するスキームを確認できます。

<code class="go">func handler(w http.ResponseWriter, r *http.Request) {
    if r.TLS == nil {
        fmt.Fprintf(w, "HTTP")
    } else {
        fmt.Fprintf(w, "HTTPS")
    }
}</code>
ログイン後にコピー

更新されたメイン関数

さらに、次を使用して HTTP プロトコルと HTTPS プロトコルの両方を提供します。両方のリッスン関数:

<code class="go">func main() {
    http.HandleFunc("/", handler)
    go func() {
        log.Fatal(http.ListenAndServeTLS(":8443", "localhost.crt", "localhost.key", nil))
    }()
    log.Fatal(http.ListenAndServe(":8080", nil))
}</code>
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート