Как установить код состояния HTTP на http.ResponseWriter

#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 .