在Ruby/Rack中,可以使用scheme#request檢索目前請求URL的scheme。但是,在 Go 中,http.Request.URL.Scheme 傳回一個空字串。要正確取得該方案,您必須考慮以下方法:
服務 HTTP 和 HTTPS 協定需要同時使用具有相同處理程序的 http.ListenAndServe() 和 http.ListenAndServeTLS()。透過僅使用 http.ListenAndServe(),您將專門偵聽 HTTP 協定。
HTTPS 是基於 TLS 的 HTTP,在 http.Request 物件中提供 TLS 屬性。此屬性傳回一個 *tls.ConnectionState 對象,其中包含有關請求所使用的 TLS 的資訊。
要確定客戶端使用的方案,請檢查要求的 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的Scheme?的詳細內容。更多資訊請關注PHP中文網其他相關文章!