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

Go で現在のリクエスト URL のスキームを確認するにはどうすればよいですか?

DDD
リリース: 2024-11-03 17:35:03
オリジナル
853 人が閲覧しました

How to Determine the Scheme of the Current Request URL in Go?

Go で現在のリクエスト URL のスキームを決定する

Ruby/Rack では、scheme#request を使用して現在のリクエスト URL のスキームを取得できます。ただし、Go では、http.Request.URL.Scheme は空の文字列を返します。スキームを正しく取得するには、次のアプローチを考慮する必要があります。

HTTP および HTTPS プロトコルを提供するには、同じハンドラーで http.ListenAndServe() と http.ListenAndServeTLS() の両方を同時に使用する必要があります。 http.ListenAndServe() のみを使用すると、HTTP プロトコルのみをリッスンすることになります。

HTTPS は TLS 上の HTTP であり、http.Request オブジェクトに TLS プロパティを提供します。このプロパティは、リクエストに使用された TLS に関する情報を含む *tls.ConnectionState オブジェクトを返します。

クライアントが使用するスキームを確認するには、リクエストの TLS プロパティを調べます:

  • r.TLS が nil でない場合、スキームは HTTPS でした。
  • r.TLS が nil の場合、スキームは HTTP でした。

このアプローチを示す更新されたコード例は次のとおりです。 :

<code class="go">package main

import (
    "fmt"
    "log"
    "net/http"
    "net/http/httputil"
)

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>
ログイン後にコピー

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

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