ฉันพยายามสนับสนุน CORS ในแอปพลิเคชัน Node.js ของฉันซึ่งใช้เว็บเฟรมเวิร์ก Express.js ฉันได้อ่านการอภิปรายกลุ่มของ Googleเกี่ยวกับวิธีจัดการเรื่องนี้และอ่านบทความสองสามข้อเกี่ยวกับวิธีการทำงานของ CORS ก่อนอื่นฉันทำสิ่งนี้ (รหัสถูกเขียนด้วยไวยากรณ์ CoffeeScript):
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) สิ่งนี้ยังใช้งานได้ใน Safari
ฉันได้อ่านแล้ว ...
ในเบราว์เซอร์ที่ใช้ CORS คำขอ GET หรือ POST แบบข้ามต้นทางจะนำหน้าด้วยคำขอ OPTIONS ที่ตรวจสอบว่า GET หรือ POST นั้นตกลงหรือไม่
ดังนั้นคำถามหลักของฉันคือทำไมสิ่งนี้ดูเหมือนจะไม่เกิดขึ้นในกรณีของฉัน? ทำไมแอปของฉันไม่บล็อกตัวเลือกเรียกว่า ทำไมฉันต้องตั้งค่าส่วนหัวในแอพหลัก get.get ของฉัน