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


102

Как установить код состояния HTTP на http.ResponseWriter(например, 500 или 403)?

Я вижу, что к запросам обычно прикреплен код состояния 200.

Ответы:


165

Используйте 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!"))
}

Как вы можете получить доступ к заголовку, написанному в промежуточном программном обеспечении. res.Header (). Get ('StatusCode') дает ноль.
kailash yogeshwar

92

Кроме того, 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 () - ваши друзья


Не знаю почему, но у меня работает только этот ответ, а не «WriteHeader (int)», так что большое спасибо!
Wishmaster

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

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


2
это журналыhttp: superfluous response.WriteHeader call
panchicore

2
Привет, @panchicore, на случай, если задним числом это не было очевидно - и для завершения - вы можете отправить только один такой заголовок, второй был просто другим примером. Слово «лишнее» в этом предупреждении просто говорит о том, что следует отправлять только первое.
Адам Джек,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.