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

Как установить код состояния 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!"))
}

Ответ 2

Помимо WriteHeader(int) вы можете использовать вспомогательный метод http.Error, например:

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.Error() и http.StatusText() - ваши друзья

Ответ 3

w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

полный список здесь