HTML输出被解释为纯文本,而不是以HTML形式接收

7

我相信这只是我做的一些愚蠢的事情,但我是Go的新手,所以不确定发生了什么。我有以下基本设置。

requestHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    t := template.New("test")
    t, _ := template.ParseFiles("base.html")
    t.Execute(w, "")
})

server := &http.Server{
    Addr:           ":9999",
    Handler:        requestHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}

log.Fatal(server.ListenAndServe())

base.html的内容如下:

<DOCTYPE html>
<html>
    <body>
        base.html
    </body>
</html>

当我运行服务器并加载页面时,我看到模板中的HTML原样显示 - 而不是解释后的版本。 原来,模板被包装在 pre 标签中,并随后被包装在一个新文档中。
那么发生了什么? 为什么go默认将其视为纯文本而不是以html形式发送,以便浏览器可以正确呈现它? 这肯定是一个简单的误解,但在搜索中没有找到任何东西。 有什么想法吗?
1个回答

10

您需要添加一个带有Content-Type的标题

 w.Header().Set("Content-Type", "text/html")

啊,我想可能就是那样。当然,在写任何东西之前,首部需要被设置,以便澄清。谢谢! - meesterguyperson
6
其实你不需要这样做(这只是有帮助的):前往或者你的浏览器会自动推断。问题提问者在doctype声明中漏掉了一个感叹号!,这就是为什么它会以纯文本形式呈现:<!DOCTYPE html> - elithrar
1
好的,现在感觉有点傻。 :-) 为什么每个讨厌的字符都那么重要?! 很好的发现。 - meesterguyperson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接