Go语言 http 中的 request.Host 和 request.URL.Host 的区别
golang 中的例子#
http 代码:
http.ListenAndServe("localhost:9999", nil)
使用 curl 命令访问:curl http://localhost:9999/_geecache/scores/Tom
则:
- r.Host 是 localhost:9999,
- r.URL.Host 是空字符串,
- r.URL.Path 是 /_geecache/scores/Tom。
定义#
r.URL 字段是通过解析 HTTP 请求 URI 创建的。
r.Host 字段是主机请求标头的值。它与调用 r.Header.Get("Host") 的值相同。
如果网上的HTTP请求是:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.example.org:8080
则:r.URL.Host 是空字符串,
r.Host 是 www.example.org:8080。
解释#
r.URL.Host 和 r.Host的值几乎总是不同的。在代理服务器上,r.URL.Host 是目标服务器的主机,r.Host 是代理服务器本身的主机。当不通过代理连接时,客户端不会在请求 URI 中指定主机。在这种情况下,r.URL.Host 是空字符串。
如果未实现代理,则应使用r.Host确定主机。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南