удаляются заголовки ответов HTTP golang

Я не уверен, что это ошибка или как должен работать пакет ответов 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. Является ли такое поведение намеренным?

1 ответов


заголовки могут быть записаны только один раз в ответ, поэтому вы должны установить все заголовки перед их записью. После записи заголовков они отправляются клиенту.

вы должны только позвонить w.WriteHeader(http.StatusCreated) после того, как вы установили все ваши заголовки.

читайте в спецификации GOLANG, как работает WriteHeader

это правило одинаково для тела после того, как тело написано (запись в ответ буквально отправляет его клиенту), он не может быть возмущен или измененный.