Comment définir le code d'état HTTP sur http.ResponseWriter


101

Comment définir le code d'état HTTP sur un http.ResponseWriter(par exemple, 500 ou 403)?

Je peux voir que les demandes sont normalement associées à un code de statut de 200.

Réponses:


162

Utilisez http.ResponseWriter.WriteHeader. De la documentation:

WriteHeader envoie un en-tête de réponse HTTP avec un code d'état. Si WriteHeader n'est pas appelé explicitement, le premier appel à Write déclenchera un WriteHeader implicite (http.StatusOK). Ainsi, les appels explicites à WriteHeader sont principalement utilisés pour envoyer des codes d'erreur.

Exemple:

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

Comment pouvez-vous accéder à l'en-tête écrit dans le middleware inclus. res.Header (). Get ('StatusCode') donne nil.
kailash yogeshwar

91

En dehors de cela, WriteHeader(int)vous pouvez utiliser la méthode d'assistance http.Error , par exemple:

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

Les méthodes http.Error () et http.StatusText () sont vos amis


Je ne sais pas pourquoi, mais seule cette réponse fonctionne pour moi, pas "WriteHeader (int)", donc merci beaucoup!
Wishmaster

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

liste complète ici


1
it logshttp: superfluous response.WriteHeader call
panchicore le

1
Hé @panchicore au cas où ce ne serait pas évident avec le recul - et pour terminer - vous ne pouvez envoyer qu'un seul de ces en-têtes, le second n'était qu'un exemple différent. Le "superflu" dans cet avertissement indique simplement que seul le premier doit être envoyé.
Adam Jack le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.