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.