首页 > 后端开发 > Golang > 正文

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

DDD
发布: 2024-11-03 06:10:03
原创
871 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!