首頁  >  文章  >  後端開發  >  Go 中如何確定請求 URL 方案?

Go 中如何確定請求 URL 方案?

DDD
DDD原創
2024-11-03 06:10:03877瀏覽

How Do You Determine the Request URL Scheme in Go?

在 Go 中確定請求 URL 方案

在 Ruby 的 Rack 中間件中,使用 schema#request 方法可以直接取得目前請求 URL 的方案。然而,在 Go 中,http.Request.URL.Scheme 欄位傳回空字串,讓開發者感到困惑。

揭開Scheme

解鎖 Go 中請求 URL schema 的關鍵在於認識到必須處理 HTTP 和 HTTPS 請求。透過同時使用 http.ListenAndServe() 和 http.ListenAndServeTLS() 函數,我們可以同時滿足這兩種協定的需求。

TLS 來救援

HTTPS 是基於 TLS 的 HTTP,在其中提供了 TLS 屬性*http.Request 公開有關 TLS 連接的資訊。透過檢查此屬性,我們可以辨別所使用的協定:

  • 如果 r.TLS 為非空,則請求是透過 HTTPS 發出的。
  • 如果 r.TLS 為空,請求是透過 HTTP 發出的。

實作

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn