如何在运行 AppEngine 的 Go 服务器生成的响应中设置 HTTP 标头?

我正在尝试使用 golang 和 google app engine 设置标题。下面是简单代码的样子:


w.Header().Set("Content-Type", "application/xml")

w.Header().Set("Access-Control-Allow-Origin", "*")

    w.Header().Set("header-name", "value")

它似乎不适用于我的开发服务器。我总是得到通常的标题和


content-type:text/plain; charset=utf-8

当我部署时,我得到


Content-Type:text/html; charset=utf-8

我做错了还是这是一个错误(另一个)?


幕布斯6054654
浏览 178回答 3
3回答

尚方宝剑之说

问题似乎是我在自定义标头之前设置了 http 代码。请注意,如果您有w.WriteHeader(200)之前w.Header的标题将不会被设置。

HUX布斯

如果没有其余的代码,就很难预测。但是,根本原因可能是您在设置标头之前已经编写了响应。要么是这样的:w.Write([]byte(data))或者像这样:fmt.Printf(w, "A test response")

慕田峪7331174

GAE SDK 肯定存在错误。在开发和生产环境之间观察到不合理的不同行为。我遇到了同样的问题,我以特定顺序设置标题 - 适用于 dev 但在 prod 中未设置标题。在 dev env 中,这会使您设置的标头正确返回:func SignalingHandler(w http.ResponseWriter, r *http.Request) {    if r.Method != "GET" {        http.NotFound(w, r)        return    }    data := "test"    w.Write([]byte(data))    w.Header().Set("Content-Type", "application/json")    w.Header().Add("Access-Control-Allow-Origin", "*")}但是在 prod 环境中,我必须颠倒顺序 - 并且仅在设置标题后才使用“write”方法(否则它将不起作用): func SignalingHandler(w http.ResponseWriter, r *http.Request) {    if r.Method != "GET" {        http.NotFound(w, r)        return    }    data := "test"    w.Header().Set("Content-Type", "application/json")    w.Header().Add("Access-Control-Allow-Origin", "*")    w.Write([]byte(data))}为了使产品在 prod 中工作,请确保在设置任何标头后不要使用 write 方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go