duanhaodi4809
2016-09-10 15:24
浏览 103
已采纳

golang http响应头被删除

I'm not sure if this is a bug or how the http response package is supposed to work.

In this example the Content-Type response header will not be set

// Return the response
w.WriteHeader(http.StatusCreated)
w.Header().Set("Content-Type", "application/json")
w.Write(js)

How ever if I flip the order of how the headers are set it does work:

// Return the response
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
w.Write(js)

Now this will actual set the header to application/json. Is this behavior intended?

图片转代码服务由CSDN问答提供 功能建议

我不确定这是错误还是HTTP响应包应该工作。

在此示例中,将不会设置 Content-Type 响应标头

  //返回响应
w。  WriteHeader(http.StatusCreated)
w.Header()。Set(“ Content-Type”,“ application / json”)
w.Write(js)
   
 
 

但是如果我翻转标题的设置顺序,它将起作用:

  //返回响应
w.Header()。Set(“ Content-Type  “,” application / json“)
w.WriteHeader(http.StatusCreated)
w.Write(js)
   
 
 

现在,这实际上会将标头设置为< 代码>应用/ JSON 。 这是故意行为吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyun1860 2016-09-10 15:31
    已采纳

    Headers can only be written once to the response so you must set all the headers before writting them. Once the headers are written they are sent to the client.

    You should only call w.WriteHeader(http.StatusCreated) once you have set all your headers.

    Read in the GOLANG spec how WriteHeader works

    This rule is the same for the body once the body is written (writting to the response is literally sending it to the client) it can not be resent or changed.

    点赞 打赏 评论

相关推荐 更多相似问题