开发服务器中的相对 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中文网其他相关文章!