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 プロパティを調べます:
このアプローチを示す更新されたコード例は次のとおりです。 :
<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 サイトの他の関連記事を参照してください。