Como definir o código de status HTTP em http.ResponseWriter


101

Como defino o código de status HTTP em um http.ResponseWriter(por exemplo, 500 ou 403)?

Posso ver que as solicitações normalmente têm um código de status de 200 anexado a elas.

Respostas:


161

Use http.ResponseWriter.WriteHeader. Da documentação:

WriteHeader envia um cabeçalho de resposta HTTP com o código de status. Se WriteHeader não for chamado explicitamente, a primeira chamada para Write acionará um WriteHeader implícito (http.StatusOK). Assim, as chamadas explícitas para WriteHeader são usadas principalmente para enviar códigos de erro.

Exemplo:

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

Como você pode acessar o cabeçalho escrito no middleware anexo. res.Header (). Get ('StatusCode') dá nulo.
Kailash Yogeshwar

91

Além disso, WriteHeader(int)você pode usar o método auxiliar http.Error , por exemplo:

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

Os métodos http.Error () e http.StatusText () são seus amigos


Não sei por que, mas só essa resposta funciona para mim, não "WriteHeader (int)", então muito obrigado!
Wishmaster

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

lista completa aqui


1
ele registrahttp: superfluous response.WriteHeader call
panchicore

1
Ei @panchicore, caso não tenha ficado óbvio em retrospectiva - e para a conclusão - você só pode enviar um desses cabeçalhos, o segundo foi apenas um exemplo diferente. O "supérfluo" nesse aviso apenas afirma que apenas o primeiro deve ser enviado.
Adam Jack
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.