Google App Engine 将 content-type 更改为 text/html

之前已经问过这个问题,但该答案适用于 python 应用程序。我想知道如何解决 go 应用程序的问题。


我在 Google App Engine 上部署了一个由移动客户端使用的网络服务。使用下面的函数,我将响应作为 XML 或 JSON(根据客户端的请求)发送


func (api *API) Respond(w http.ResponseWriter, r *http.Request, body interface{}, status int) {


    var contentType string

    var content []byte

    var err error


    if r.Header.Get("Accept") == "application/xml" {


        contentType = "application/xml; charset=UTF-8"

        content, err = xml.Marshal(body)


    } else {


        contentType = "application/json; charset=UTF-8"

        content, err = json.MarshalIndent(body, "", "  ")

    }


    if err != nil {

        panic(err)

    }


    w.WriteHeader(status)

    w.Header().Set("Content-Type", contentType)

    w.Write(content)

}

然而,在任何一种情况下,客户端设备都会收到一个 Content-Type text/html。我怎样才能解决这个问题?这是我的应用程序的 app.yam 文件:


application: wks-api

version: 3

runtime: go

api_version: go1


handlers:

- url: /.*

  script: api


暮色呼如
浏览 233回答 2
2回答

拉莫斯之舞

查看https://golang.org/pkg/net/http/#ResponseWriter中的文档,我引用:调用 WriteHeader(或 Write)后更改标头无效现在看看你的代码:w.WriteHeader(status) w.Header().Set("Content-Type", contentType)你看,你是真的“以WriteHeader一个电话后更改标题” -因此,它“没有效果”。因此,请在调用之前执行“更改标题” :w.Header().Set("Content-Type", contentType) w.WriteHeader(status)我认为这根本不是特定于应用程序引擎的——它应该适用http于 Go 中的任何使用。

holdtom

查看来自http/header 的信息:WriteHeader 发送带有状态代码的 HTTP 响应标头。如果未显式调用 WriteHeader,则首次调用 Write 将触发隐式 WriteHeader(http.StatusOK)。因此显式调用 WriteHeader 主要用于发送错误代码。首先尝试设置标题然后发送它
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go