यदि आप अपने राउटर को ओवरराइड नहीं करना चाहते हैं (यदि आपके पास आपका ऐप इस तरह से कॉन्फ़िगर करने का तरीका नहीं है, या जो रूट के आधार पर किसी रूट पर कोर्स को कॉन्फ़िगर करना चाहते हैं), पूर्व उड़ान अनुरोध को संभालने के लिए एक विकल्प हैंडलर जोड़ें। ।
यानी, गोरिल्ला मक्स के साथ आपके मार्ग जैसे दिखेंगे:
accounts := router.Path("/accounts").Subrouter()
accounts.Methods("POST").Handler(AccountsCreate)
accounts.Methods("OPTIONS").Handler(AccountsCreatePreFlight)
ऊपर ध्यान दें कि हमारे POST हैंडलर के अलावा, हम एक विशिष्ट विकल्प विधि हैंडलर को परिभाषित कर रहे हैं ।
और फिर वास्तविक विकल्प पूर्वधारणा विधि को संभालने के लिए, आप खातों को परिभाषित कर सकते हैंप्रेपलाइट जैसे:
// Check the origin is valid.
origin := r.Header.Get("Origin")
validOrigin, err := validateOrigin(origin)
if err != nil {
return err
}
// If it is, allow CORS.
if validOrigin {
w.Header().Set("Access-Control-Allow-Origin", origin)
w.Header().Set("Access-Control-Allow-Methods", "POST")
w.Header().Set("Access-Control-Allow-Headers",
"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
वास्तव में यह सब मेरे लिए क्लिक करता है (वास्तव में यह समझने के अलावा कि कोर कैसे काम करता है) यह है कि प्रीफ़लाइट अनुरोध का HTTP तरीका वास्तविक अनुरोध के HTTP विधि से अलग है। CORS आरंभ करने के लिए, ब्राउज़र HTTP मेथड ऑप्शंस के साथ प्रीफ़्लाइट रिक्वेस्ट भेजता है, जिसे आपको अपने राउटर में स्पष्ट रूप से हैंडल करना होता है, और फिर, यदि यह "Access-Control-Allow-Origin": origin
आपके एप्लिकेशन से उचित प्रतिक्रिया (या "सभी के लिए") प्राप्त करता है, तो यह वास्तविक आरंभ करता है निवेदन।
मेरा यह भी मानना है कि आप केवल मानक प्रकार के अनुरोधों (यानी: GET) के लिए "*" कर सकते हैं, लेकिन दूसरों के लिए आपको स्पष्ट रूप से मूल सेट करना होगा जैसे मैं ऊपर करता हूं।
w.Header().Add("Access-Control-Allow-Methods", "PUT") w.Header().Add("Access-Control-Allow-Headers", "Content-Type")