确定开发服务器中的 URL 主机和方案:为什么它们是空白?
从相对路径访问 HTTP 服务器时,如下所示在开发环境中很常见,某些 URL 属性可能会显示为空白。具体来说,request.URL.Host 和 request.URL.Scheme 可能会返回空值。
为什么会发生这种情况?
相对 HTTP 请求,通常由浏览器在以下情况下发出本地访问服务器,缺乏明确的主机和方案信息。这与 HTTP 代理使用的绝对 URL 形成对比,后者在请求中包含这些详细信息。对于相对请求,http.Request.URL 对象中仅提供原始 URL。
访问 HTTP 主机
要检索 HTTP 主机,您可以访问 http.Request 结构的 Host 属性。这提供了请求的 Host 标头中指定的主机名和端口。
区分相对 URL 和绝对 URL
您可以通过调用来确定请求是使用相对 URL 还是绝对 URL http.Request.URL 上的 IsAbs() 方法。如果 IsAbs() 返回 false,则 URL 是相对的,不包含主机或方案信息。
使用 Netcat 的示例
要演示差异,您可以使用 netcat使用相对路径发送 HTTP 请求。
cat my-http-request-file | nc localhost 8080
my-http-request-file 应包含以下内容内容,格式为 HTTP 请求:
GET / HTTP/1.1 Host: localhost:8080
此请求将在处理程序中返回空白的 r.URL.Host 和 r.URL.Scheme 值。
以上是为什么相对 HTTP 请求中 request.URL.Host 和 request.URL.Scheme 为空?的详细内容。更多信息请关注PHP中文网其他相关文章!