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.

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

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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.