当前位置: 首页 > 面试题库 >

为什么开发服务器中的request.URL.Host和Scheme为空白?

宰父衡
2023-03-14
问题内容

我是Go的新手。从文档中尝试了第一个问候,世界,并希望从请求中读取主机和方案:

package hello

import (
    "fmt"
    "http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Host: " + r.URL.Host + " Scheme: " + r.URL.Scheme)
}

但是它们的值都是空白。为什么?


问题答案:

基本上,由于您不是从HTTP代理访问HTTP服务器,因此浏览器可以发出相对的HTTP请求,如下所示:

GET / HTTP/1.1
Host: localhost:8080

(当然,鉴于服务器正在本地主机端口8080上侦听)。

现在,如果您正在使用代理访问所述服务器,则代理可以使用绝对URL:

GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080

在这两种情况下,您从Go’s获得的http.Request.URL都是原始URL(由库解析)。在这种情况下,您是从相对路径访问URL,因此URL对象中缺少主机或方案。

如果确实要获取HTTP主机,则可能要访问Hosthttp.Request结构的属性。参见http://golang.org/pkg/http/#Request

您可以使用netcat格式正确的HTTP请求进行验证(可以复制以上代码块,并确保文件后有空白行)。尝试一下:

cat my-http-request-file | nc localhost 8080

另外,您可以通过调用以下IsAbs()方法来检查服务器/处理程序中的请求是否是相对URL或绝对URL :

isAbsoluteURL := r.URL.IsAbs()


 类似资料:
  • 问题内容: 我想让Django开发服务器在开始运行之前做一些事情。为此,我创建了一个新应用,将其添加到的顶部,然后使用以下代码在该应用中创建一个文件: (其实我想要做的事情是不是写作课程一行到标准输出,更复杂,但是这是一个演示该问题最简单的例子,我之所以超越,而不是或其他方法,是因为我需要已经在运行此代码时设置。) 当我运行时,“关于要在127.0.0.1上开始运行”行不是出现一次,而是在服务器开

  • 我在Jaspersoft Studio中创建了一个示例报告 并将创建的报表发布到服务器连接。但当我打开服务器并检查发布的同一项时,它显示为空报表。为什么会这样?

  • 使用触发器;这个概念听起来很简单,但却停留在为什么我的插入表是空的问题上,正如调试器和打印语句所证明的那样。 上下文是这样的:我们想用一个键更新FlightAudit表,但暂时禁止我们更改Flight表。我们想出了一个“hack”,在“Comments”列的末尾填充一个分隔符,并将其解析出来。我们正在做一个测试,看看我们是否可以在“更新后”触发器而不是“代替更新”触发器中执行我们想要的操作。我们将

  • http://www.html5rocks.com/en/tutorials/eventsource/basics/ 但是,我不明白一个重要的概念--是什么触发了服务器上导致消息发送的事件? 换句话说--在HTML5示例中--服务器只发送一次时间戳: 如果我建立一个实际的例子--例如,一个Facebook风格的“墙”或一个股票报价器,在这个例子中,每当某个数据发生变化时,服务器就会向客户机“推送”

  • 问题内容: 我使用JDBC连接到MySQL。在时,一切正常。 但是,当我将应用程序移动到Intranet中的另一台计算机上并用于连接到MySQL数据库时,大约需要1分钟才能成功连接到MySQL。这是怎么回事? 问题答案: 好吧,这可能是DNS问题。您可以通过从配置文件中的选项开始禁用DNS主机名查找。 在这里阅读更多详细信息:http : //dev.mysql.com/doc/refman/5.

  • 下面的消息表明JBoss没有启动299个服务中的59个。为什么呢? INFO[org.jboss.as](控制器引导线程)JBAS015874:jboss EAP 6.3.0。GA(AS 7.4.0.Final-redhat-19)启动时间为10290ms,启动299个服务中的261个(59个服务为惰性、被动或按需)