为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
幕布斯6054654 2021-07-29 17:51:05
我正在尝试使用 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我做错了还是这是一个错误(另一个)?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-08-02
?
HUX布斯

TA贡献1876条经验 获得超6个赞

如果没有其余的代码,就很难预测。但是,根本原因可能是您在设置标头之前已经编写了响应。

要么是这样的:

w.Write([]byte(data))

或者像这样:

fmt.Printf(w, "A test response")


查看完整回答
反对 回复 2021-08-02
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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 方法。


查看完整回答
反对 回复 2021-08-02
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信