मैं अपने Node.js एप्लिकेशन में CORS का समर्थन करने का प्रयास कर रहा हूं जो Express.js वेब फ्रेमवर्क का उपयोग करता है। मैंने इस बारे में Google समूह चर्चा को पढ़ा है कि इसे कैसे संभालना है, और कुछ लेखों के बारे में पढ़ें कि कोर कैसे काम करता है। सबसे पहले, मैंने ऐसा किया (कोड कॉफीस्क्रिप्ट सिंटैक्स में लिखा गया है):
app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
यह काम करने के लिए प्रतीत नहीं होता है। ऐसा लगता है कि मेरा ब्राउज़र (Chrome) प्रारंभिक विकल्प अनुरोध नहीं भेज रहा है। जब मैंने संसाधन के लिए ब्लॉक को अपडेट किया तो मुझे एक क्रॉस-ओरिजनल GET अनुरोध प्रस्तुत करना होगा:
app.get "/somethingelse", (req, res) ->
# ...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
यह (Chrome में) काम करता है। यह भी सफारी में काम करता है।
मैंने पढ़ा है कि ...
CORS को लागू करने वाले ब्राउज़र में, प्रत्येक क्रॉस-उत्पत्ति GET या POST अनुरोध एक विकल्प अनुरोध से पहले होता है जो यह जांचता है कि क्या GET या POST ठीक है।
तो मेरा मुख्य प्रश्न यह है कि मेरे मामले में ऐसा कैसे होता है? मेरे app.options ब्लॉक क्यों नहीं कहा जाता है? मुझे अपने मुख्य app.get ब्लॉक में हेडर सेट करने की आवश्यकता क्यों है?