Cómo configurar el código de estado HTTP en http.ResponseWriter

101

¿Cómo configuro el código de estado HTTP en un http.ResponseWriter(por ejemplo, 500 o 403)?

Puedo ver que las solicitudes normalmente tienen un código de estado de 200 adjunto.

Nick H
fuente

Respuestas:

161

Utilice http.ResponseWriter.WriteHeader. De la documentación:

WriteHeader envía un encabezado de respuesta HTTP con código de estado. Si no se llama a WriteHeader explícitamente, la primera llamada a Write activará un WriteHeader implícito (http.StatusOK). Por tanto, las llamadas explícitas a WriteHeader se utilizan principalmente para enviar códigos de error.

Ejemplo:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}
Tim Cooper
fuente
¿Cómo se puede acceder al encabezado escrito en el middleware adjunto? res.Header (). Get ('StatusCode') da nil.
kailash yogeshwar
91

Además WriteHeader(int), puede utilizar el método auxiliar http.Error , por ejemplo:

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

Los métodos http.Error () y http.StatusText () son tus amigos

Yandry Pozo
fuente
No sé por qué, pero solo esta respuesta funciona para mí, no "WriteHeader (int)", ¡así que muchas gracias!
Wishmaster
29
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

lista completa aquí

Marcel Novy
fuente
1
registrahttp: superfluous response.WriteHeader call
panchicore
1
Hola @panchicore, en caso de que no fuera obvio en retrospectiva, y para completar, solo puede enviar uno de esos encabezados, el segundo fue solo un ejemplo diferente. Lo "superfluo" en esa advertencia simplemente dice que solo se debe enviar el primero.
Adam Jack