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

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

Barbara Streisand
Barbara Streisand原創
2024-11-04 15:24:02274瀏覽

How to Determine the Request URL Scheme in Go?

在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>

更新了主要功能

此外,透過使用兩個監聽功能:

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

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