Cara mengatur kode status HTTP di http.ResponseWriter

102

Bagaimana cara mengatur kode status HTTP pada http.ResponseWriter(misalnya ke 500 atau 403)?

Saya dapat melihat bahwa permintaan biasanya memiliki kode status 200 yang menyertainya.

Nick H.
sumber

Jawaban:

165

Gunakan http.ResponseWriter.WriteHeader. Dari dokumentasi:

WriteHeader mengirimkan header respons HTTP dengan kode status. Jika WriteHeader tidak dipanggil secara eksplisit, panggilan pertama ke Write akan memicu WriteHeader implisit (http.StatusOK). Jadi panggilan eksplisit ke WriteHeader terutama digunakan untuk mengirim kode kesalahan.

Contoh:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}
Tim Cooper
sumber
Bagaimana Anda bisa mengakses header yang tertulis di middleware yang melampirkan. res.Header (). Get ('StatusCode') memberikan nihil.
kailash yogeshwar
92

Selain WriteHeader(int)Anda dapat menggunakan metode pembantu http.Error , misalnya:

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

Metode http.Error () dan http.StatusText () adalah teman Anda

Yandry Pozo
sumber
Saya tidak tahu mengapa, tetapi hanya jawaban ini yang berhasil untuk saya, bukan "WriteHeader (int)", jadi terima kasih banyak!
Wishmaster
31
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

daftar lengkapnya di sini

Marcel Novy
sumber
2
itu mencatathttp: superfluous response.WriteHeader call
panchicore
2
Halo @panchicore seandainya tidak jelas di belakang - dan untuk penyelesaian - Anda hanya dapat mengirim satu tajuk seperti itu, yang kedua hanyalah contoh yang berbeda. Kata "berlebihan" dalam peringatan itu hanya menyatakan bahwa hanya yang pertama yang harus dikirim.
Adam Jack