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.

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

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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.