在Go中使用http包实现简单的HTTP服务器时,可能会遇到请求为空值的情况。开发期间的 URL.Host 和 request.URL.Scheme。这可能会令人困惑,因为您希望这些字段提供有关请求的信息。让我们调查一下为什么会发生这种行为,并探索获取丢失数据的方法。
在您的示例代码中,请求消息是通过相对路径接收的。这意味着客户端的 HTTP 请求不包含具有明确指定的主机和方案的绝对 URL。相反,客户端使用相对路径,将这些字段留空。
但是,如果请求是通过 HTTP 代理或使用绝对 URL 发出的,则 request.URL.Host 和 request.URL.Scheme 将被填充,因为代理或客户端将明确提供此信息。
要确认这一点,您可以使用 netcat 等工具以不同的请求格式测试您的服务器。使用相对路径发送请求将产生空白的 Host 和 Scheme 字段,而使用绝对 URL 将填充它们。
作为仅依赖 request.URL.Host 的替代方案,您可以直接访问 Host 字段来自 http.Request 结构,无论请求使用相对路径还是绝对路径,该结构都将提供主机信息。
此外,您可以使用以下命令检查处理程序收到的请求是绝对路径还是相对路径request.URL 结构的 IsAbs() 方法。这允许您适当地处理具有相对路径的请求。
以上是为什么 My Go HTTP 开发服务器中 request.URL.Host 和 request.URL.Scheme 为空?的详细内容。更多信息请关注PHP中文网其他相关文章!