HTTP.ResponseWriter पर HTTP स्टेटस कोड कैसे सेट करें


101

मैं एक http.ResponseWriter(जैसे 500 या 403) पर HTTP स्थिति कोड कैसे सेट करूँ ?

मैं देख सकता हूं कि अनुरोधों में सामान्यतः 200 से जुड़ी स्थिति कोड होती है।

जवाबों:


162

का उपयोग करें http.ResponseWriter.WriteHeader। प्रलेखन से:

WriteHeader स्टेटस कोड के साथ एक HTTP प्रतिक्रिया हेडर भेजता है। अगर WriteHeader को स्पष्ट रूप से नहीं कहा जाता है, तो Write को पहला कॉल एक निहित WriteHeader (http.StatusOK) को ट्रिगर करेगा। इस प्रकार से WriteHeader को स्पष्ट कॉल का उपयोग मुख्य रूप से त्रुटि कोड भेजने के लिए किया जाता है।

उदाहरण:

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

आप मिडलवेयर को घेरने में लिखे हेडर को कैसे एक्सेस कर सकते हैं। res.Header ()। Get ('StatusCode') शून्य देता है।
कैलाश योगेश्वर

91

इसके अलावा WriteHeader(int)आप सहायक विधि का उपयोग कर सकते हैं http.Error , उदाहरण के लिए:

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

http.Error () और http.StatusText () विधियाँ आपके मित्र हैं


मुझे पता नहीं क्यों, लेकिन केवल यह उत्तर मेरे लिए काम करता है, "WriteHeader (int)" नहीं, इसलिए बहुत कुछ धन्यवाद!
विशमास्टर

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

पूरी सूची यहाँ


1
यह लॉग करता हैhttp: superfluous response.WriteHeader call
पंचक्रोशी

1
अरे @ पैनकिचोर के मामले में यह स्पष्ट नहीं था - और पूरा करने के लिए - आप केवल एक ही हेडर भेज सकते हैं, दूसरा सिर्फ एक अलग उदाहरण था। उस चेतावनी में "अतिशयोक्ति" केवल यह बताती है कि केवल पहले को भेजा जाना चाहिए।
एडम जैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.