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.

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

¿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


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í


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.