#go
#Вперед
Вопрос:
Как мне установить код состояния HTTP на http.ResponseWriter
(например, на 500 или 403)?
Я вижу, что к запросам обычно прикреплен код состояния 200.
Ответ №1:
Использовать http.ResponseWriter.WriteHeader
. Из документации:
WriteHeader отправляет заголовок HTTP-ответа с кодом состояния. Если WriteHeader не вызывается явно, первый вызов Write вызовет неявный WriteHeader(http.StatusOK). Таким образом, явные вызовы WriteHeader в основном используются для отправки кодов ошибок.
Пример:
func ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("500 - Something bad happened!"))
}
Комментарии:
1. Как вы можете получить доступ к заголовку, написанному во вложенном файле middleware. res. Header().Get(‘StatusCode’) выдает ноль.
Ответ №2:
Кроме WriteHeader(int)
того, вы можете использовать вспомогательный метод http.Ошибка, например:
func yourFuncHandler(w http.ResponseWriter, r *http.Request) {
http.Error(w, "my own error message", http.StatusForbidden)
// or using the default message error
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
}
http.Ошибка () и http.Методы statusText() — ваши друзья
Комментарии:
1. Я не знаю почему, но для меня работает только этот ответ, а не «WriteHeader (int)», так что большое спасибо!
Ответ №3:
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)
полный список здесь
Комментарии:
1. он регистрирует
http: superfluous response.WriteHeader call
2. Привет @panchicore на случай, если это не было очевидно в ретроспективе — и для завершения — вы можете отправить только один такой заголовок, второй был просто другим примером. «Лишний» в этом предупреждении просто указывает, что должен быть отправлен только первый.
3. @panchicore Если
WriteHeader
не вызывается явно, первый вызовWrite
вызовет неявныйWriteHeader(http.StatusOK)
. Убедитесь, что вы вызываетеWriteHeader
раньшеWrite
.