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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 18:56:10954浏览

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

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