Cách đặt mã trạng thái HTTP trên http.ResponseWriter


101

Làm cách nào để đặt mã trạng thái HTTP trên một http.ResponseWriter(ví dụ: 500 hoặc 403)?

Tôi có thể thấy rằng các yêu cầu thường có mã trạng thái 200 được đính kèm với chúng.

Câu trả lời:


161

Sử dụng http.ResponseWriter.WriteHeader. Từ tài liệu:

WriteHeader gửi một tiêu đề phản hồi HTTP với mã trạng thái. Nếu WriteHeader không được gọi một cách rõ ràng, thì lệnh gọi Write đầu tiên sẽ kích hoạt một WriteHeader ngầm hiểu (http.StatusOK). Do đó, các cuộc gọi rõ ràng đến WriteHeader chủ yếu được sử dụng để gửi mã lỗi.

Thí dụ:

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

Làm thế nào bạn có thể truy cập tiêu đề được viết bằng phần mềm trung gian kèm theo. res.Header (). get ('StatusCode') cho kết quả là nil.
kailash yogeshwar

91

Ngoài ra, WriteHeader(int)bạn có thể sử dụng phương thức trợ giúp http.Error , ví dụ:

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

Phương thức http.Error () và http.StatusText () là bạn của bạn


Tôi không biết tại sao, nhưng chỉ có câu trả lời này phù hợp với tôi, không phải "WriteHeader (int)", rất nhiều!
Wishmaster

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

danh sách đầy đủ ở đây


1
nó ghi nhật kýhttp: superfluous response.WriteHeader call
panchicore

1
Xin chào @panchicore trong trường hợp nó không rõ ràng trong nhận thức muộn - và để hoàn thành - bạn chỉ có thể gửi một tiêu đề như vậy, tiêu đề thứ hai chỉ là một ví dụ khác. Điều "thừa" trong cảnh báo đó chỉ đơn thuần nói rằng chỉ nên gửi tin nhắn đầu tiên.
Adam Jack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.