Come impostare il codice di stato HTTP su http.ResponseWriter


101

Come si imposta il codice di stato HTTP su un http.ResponseWriter(ad esempio, 500 o 403)?

Vedo che le richieste normalmente hanno un codice di stato 200 allegato.

Risposte:


162

Usa http.ResponseWriter.WriteHeader. Dalla documentazione:

WriteHeader invia un'intestazione di risposta HTTP con il codice di stato. Se WriteHeader non viene chiamato in modo esplicito, la prima chiamata a Write attiverà un WriteHeader implicito (http.StatusOK). Pertanto le chiamate esplicite a WriteHeader vengono utilizzate principalmente per inviare codici di errore.

Esempio:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}

Come puoi accedere all'intestazione scritta nel middleware allegato. res.Header (). Get ('StatusCode') restituisce nil.
kailash yogeshwar

91

Oltre WriteHeader(int)a poter utilizzare il metodo di supporto http.Error , ad esempio:

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

I metodi http.Error () e http.StatusText () sono tuoi amici


Non so perché, ma solo questa risposta funziona per me, non "WriteHeader (int)", quindi grazie mille!
Wishmaster

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

elenco completo qui


1
registrahttp: superfluous response.WriteHeader call
panchicore

1
Ehi @panchicore nel caso in cui non fosse ovvio col senno di poi - e per il completamento - puoi inviare solo uno di questi header, il secondo era solo un esempio diverso. Il "superfluo" in quell'avvertimento afferma semplicemente che deve essere inviato solo il primo.
Adam Jack
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.