首頁  >  文章  >  後端開發  >  Go中如何確定目前請求URL的Scheme?

Go中如何確定目前請求URL的Scheme?

DDD
DDD原創
2024-11-03 17:35:03798瀏覽

How to Determine the Scheme of the Current Request URL in Go?

在Go中確定目前請求URL的Scheme

在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 屬性:

  • 如果 r.TLS 不為 nil,則方案為 HTTPS。
  • 如果 r.TLS 為 nil,則方案為 HTTP。

以下是示範此方法的更新程式碼範例:

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

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