Ruby 用の Rack ミドルウェアでは、scheme#request メソッドを使用して現在のリクエスト URL スキームを簡単に取得できます。ただし、Go では http.Request.URL.Scheme フィールドが空の文字列を返すため、開発者は困惑しています。
Go でリクエスト URL スキームのロックを解除する鍵は、次のとおりです。 HTTP リクエストと HTTPS リクエストの両方を処理する必要があることを認識しています。 http.ListenAndServe() 関数と http.ListenAndServeTLS() 関数の両方を採用することで、両方のプロトコルに対応します。
HTTPS は HTTP over TLS であり、内部で TLS プロパティを提供します。 *http.TLS 接続に関する情報を開示するリクエスト。このプロパティを調べることで、使用されているプロトコルを識別できます。
<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 サイトの他の関連記事を参照してください。