在 Ruby 的 Rack 中間件中,使用 schema#request 方法可以直接取得目前請求 URL 的方案。然而,在 Go 中,http.Request.URL.Scheme 欄位傳回空字串,讓開發者感到困惑。
解鎖 Go 中請求 URL schema 的關鍵在於認識到必須處理 HTTP 和 HTTPS 請求。透過同時使用 http.ListenAndServe() 和 http.ListenAndServeTLS() 函數,我們可以同時滿足這兩種協定的需求。
HTTPS 是基於 TLS 的 HTTP,在其中提供了 TLS 屬性*http.Request 公開有關 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中文網其他相關文章!