golang http响应标头被删除

Rod*_*igo 9 go

我不确定这是一个错误还是http响应包应该如何工作.

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

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

但是,如果我按顺序设置标题的顺序,它确实有效:

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

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

dmp*_*lla 16

标题只能写入响应一次,因此您必须在写入之前设置所有标题.写入标题后,它们将被发送到客户端.

只有w.WriteHeader(http.StatusCreated)在设置好所有标题后才能调用.

请阅读GOLANG规范,了解WriteHeader的工作原理

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