首页  >  文章  >  后端开发  >  Go 中如何确定请求 URL 方案?

Go 中如何确定请求 URL 方案?

DDD
DDD原创
2024-11-03 06:10:03874浏览

How Do You Determine the Request URL Scheme in Go?

在 Go 中确定请求 URL 方案

在 Ruby 的 Rack 中间件中,使用 schema#request 方法可以直接获取当前请求 URL 的方案。然而,在 Go 中,http.Request.URL.Scheme 字段返回空字符串,让开发者感到困惑。

揭开Scheme

解锁 Go 中请求 URL schema 的关键在于认识到必须处理 HTTP 和 HTTPS 请求。通过同时使用 http.ListenAndServe() 和 http.ListenAndServeTLS() 函数,我们可以同时满足这两种协议的需求。

TLS 来救援

HTTPS 是基于 TLS 的 HTTP,在其中提供了 TLS 属性*http.Request 公开有关 TLS 连接的信息。通过检查此属性,我们可以辨别所使用的协议:

  • 如果 r.TLS 为非空,则请求是通过 HTTPS 发出的。
  • 如果 r.TLS 为空,请求是通过 HTTP 发出的。

实现

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn