首页 > 后端开发 > Golang > 为什么 My Go 开发服务器中的 r.URL.Host 和 r.URL.Scheme 为空?

为什么 My Go 开发服务器中的 r.URL.Host 和 r.URL.Scheme 为空?

Mary-Kate Olsen
发布: 2024-12-15 18:56:10
原创
883 人浏览过

Why are r.URL.Host and r.URL.Scheme Empty in My Go Development Server?

开发服务器中的相对 URL 访问

问题:

运行 Go HTTP 服务器时在开发中,为什么 r.URL.Host 和 r.URL.Scheme 传入为空请求?

答案:

r.URL 中缺少 host 和 schema 信息,是由于开发时访问服务器时使用了相对 URL 导致的。与绝对 URL 不同,相对 URL 不指定主机或方案。

相对请求:

通常,Web 浏览器会发出绝对请求,例如:

GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080
登录后复制

但是,当直接访问本地开发服务器时,浏览器可能会使用相对的request:

GET / HTTP/1.1
Host: localhost:8080
登录后复制

在这个相对请求中,只指定了路径,省略了host和scheme。因此,当服务器收到此类请求时,r.URL.Host 和 r.URL.Scheme 将为空。

访问主机信息:

检索这种情况下的主机信息,可以使用http.Request的r.Host属性struct.

host := r.Host
登录后复制

绝对请求(可选):

为了确保您始终收到绝对请求,您可以使用 HTTP 代理。使用代理时,代理会将绝对请求转发到服务器,r.URL.Host 和 r.URL.Scheme 将包含预期值。

IsAbs() 检查:

您还可以使用 r.URL 的 IsAbs() 方法检查请求中的 URL 是绝对 URL 还是相对 URL结构:

isAbsoluteURL := r.URL.IsAbs()
登录后复制

以上是为什么 My Go 开发服务器中的 r.URL.Host 和 r.URL.Scheme 为空?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板