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.

Nick H.
quelle

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

Yandry Pozo
quelle
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

Marcel Novy
quelle
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