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


101

Як встановити код стану HTTP на http.ResponseWriter(наприклад, на 500 або 403)?

Я бачу, що до запитів зазвичай додається код стану 200.

Відповіді:


162

Використовуйте 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

91

Окрім 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

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

повний список тут


1
це реєструєтьсяhttp: superfluous response.WriteHeader call
panchicore

1
Привіт @panchicore, на випадок, якщо це не було очевидно з огляду на минуле - і для завершення - ви можете надіслати лише один такий заголовок, другий - це просто інший приклад. "Зайве" у цьому попередженні просто говорить, що слід надсилати лише перше.
Адам Джек,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.