在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 属性:
以下是演示此方法的更新代码示例:
<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中文网其他相关文章!