Jak ustawić kod stanu HTTP na http.ResponseWriter

102

Jak ustawić kod stanu HTTP w urządzeniu http.ResponseWriter(np. Na 500 lub 403)?

Widzę, że żądania zwykle mają dołączony kod statusu 200.

Nick H.
źródło

Odpowiedzi:

165

Użyj http.ResponseWriter.WriteHeader. Z dokumentacji:

WriteHeader wysyła nagłówek odpowiedzi HTTP z kodem stanu. Jeśli WriteHeader nie zostanie wywołany jawnie, pierwsze wywołanie Write wyzwoli niejawny WriteHeader (http.StatusOK). Dlatego jawne wywołania metody WriteHeader są używane głównie do wysyłania kodów błędów.

Przykład:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}
Tim Cooper
źródło
Jak uzyskać dostęp do nagłówka zapisanego w załączającym oprogramowaniu pośrednim. res.Header (). Get ('StatusCode') daje zero.
kailash yogeshwar
92

Oprócz tego WriteHeader(int)możesz skorzystać z metody pomocniczej http.Error , na przykład:

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)
}

Metody http.Error () i http.StatusText () są Twoimi przyjaciółmi

Yandry Pozo
źródło
Nie wiem dlaczego, ale działa tylko ta odpowiedź, a nie "WriteHeader (int)", więc bardzo dziękuję!
Wishmaster
31
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

pełna lista tutaj

Marcel Novy
źródło
2
logujehttp: superfluous response.WriteHeader call
panchicore
2
Hej @panchicore na wypadek, gdyby z perspektywy czasu nie było to oczywiste - i na zakończenie - możesz wysłać tylko jeden taki nagłówek, drugi był po prostu innym przykładem. Określenie „zbędne” w tym ostrzeżeniu oznacza jedynie, że należy wysłać tylko pierwsze.
Adam Jack