在 Ruby 的 Rack 中间件中,使用 schema#request 方法可以直接获取当前请求 URL 的方案。然而,在 Go 中,http.Request.URL.Scheme 字段返回空字符串,让开发者感到困惑。
解锁 Go 中请求 URL schema 的关键在于认识到必须处理 HTTP 和 HTTPS 请求。通过同时使用 http.ListenAndServe() 和 http.ListenAndServeTLS() 函数,我们可以同时满足这两种协议的需求。
HTTPS 是基于 TLS 的 HTTP,在其中提供了 TLS 属性*http.Request 公开有关 TLS 连接的信息。通过检查此属性,我们可以辨别所使用的协议:
<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中文网其他相关文章!