我正在尝试使用golang和google应用引擎设置标头。这是琐碎代码的样子:
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
我做错了还是这是一个错误(另一个)?
答案 0 :(得分:4)
似乎问题是我在自定义标头之前设置了http代码。请注意,如果您在w.WriteHeader(200)
之前w.Header
,则不会设置标题。
答案 1 :(得分:0)
这绝对是GAE SDK的一个错误。在dev和prod环境之间观察到不合理的不同行为。我遇到了同样的问题,我按照特定的顺序设置标题 - 在dev上工作但在prod标题中没有设置。
在开发环境中,这会使您设置的标题正确返回:
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环境中,我必须颠倒顺序 - 并使用"写"方法仅在设置标题后(否则它不会起作用):
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方法。
答案 2 :(得分:0)
没有剩下的代码很难预测。但是,根本原因可能是您在设置标题之前已经写过响应。
这样的事情:
w.Write([]byte(data))
或类似的东西:
fmt.Printf(w, "A test response")