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