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.