So legen Sie den HTTP-Statuscode in http.ResponseWriter fest


101

Wie setze ich den HTTP-Statuscode auf einem http.ResponseWriter(z. B. auf 500 oder 403)?

Ich kann sehen, dass Anfragen normalerweise einen Statuscode von 200 haben.

Antworten:


160

Verwenden Sie http.ResponseWriter.WriteHeader. Aus der Dokumentation:

WriteHeader sendet einen HTTP-Antwortheader mit Statuscode. Wenn WriteHeader nicht explizit aufgerufen wird, löst der erste Aufruf von Write einen impliziten WriteHeader (http.StatusOK) aus. Daher werden explizite Aufrufe von WriteHeader hauptsächlich zum Senden von Fehlercodes verwendet.

Beispiel:

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

Wie können Sie auf den Header zugreifen, der in der beiliegenden Middleware geschrieben ist? res.Header (). Get ('StatusCode') gibt null.
Kailash Yogeshwar

91

Außerdem WriteHeader(int)können Sie die Hilfsmethode http.Error verwenden , zum Beispiel:

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

Die Methoden http.Error () und http.StatusText () sind Ihre Freunde


Ich weiß nicht warum, aber nur diese Antwort funktioniert für mich, nicht "WriteHeader (int)", also vielen Dank!
Wunschmeister

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

vollständige Liste hier


1
es protokollierthttp: superfluous response.WriteHeader call
panchicore

1
Hey @panchicore, falls es im Nachhinein nicht offensichtlich war - und zum Abschluss - Sie können nur einen solchen Header senden, der zweite war nur ein anderes Beispiel. Das "Überflüssige" in dieser Warnung besagt lediglich, dass nur das erste gesendet werden soll.
Adam Jack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.