Golang HTTP 响应标头被删除

golang http response headers being removed

提问人:Rodrigo 提问时间:9/10/2016 更新时间:9/10/2016 访问量:4363

问:

我不确定这是否是一个错误,或者 http 响应包应该如何工作。

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

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

如果我翻转标题设置方式的顺序,它确实有效:

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

现在,这将实际将标头设置为 .这种行为是有意为之吗?application/json

评论


答:

18赞 dmportella 9/10/2016 #1

标头只能写入响应一次,因此在写入标头之前必须设置所有标头。一旦标头被写入,它们就会被发送到客户端。

只有在设置了所有标头后,才应调用。w.WriteHeader(http.StatusCreated)

阅读 GOLANG 规范 WriteHeader 的工作原理

此规则对于正文是相同的,一旦正文被写入(写入响应实际上是将其发送给客户端),它就不能被重新发送或更改。