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 サイトの他の関連記事を参照してください。