Express.js web çerçevesini kullanan Node.js uygulamamda CORS'i desteklemeye çalışıyorum. Bunun nasıl ele alınacağı hakkında bir Google grubu tartışması ve CORS'in nasıl çalıştığı hakkında birkaç makale okudum. İlk olarak, bunu yaptım (kod CoffeeScript sözdiziminde yazılır):
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'
# ...
Çalışmıyor gibi görünüyor. Tarayıcım (Chrome) ilk OPTIONS isteğini göndermiyor gibi görünüyor. Ben sadece kaynak bloğunu güncellediğimde, çapraz kökenli bir GET isteği göndermem gerekiyor:
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'
# ...
Çalışıyor (Chrome'da). Bu Safari'de de çalışır.
Bunu okudum ...
CORS uygulayan bir tarayıcıda, her bir çapraz kökenli GET veya POST isteğinden önce, GET veya POST'un uygun olup olmadığını kontrol eden bir SEÇENEK isteği gelir.
Yani asıl sorum şu, benim durumumda bu nasıl görünmüyor? App.options bloğum neden çağrılmıyor? Ana app.get bloğumdaki başlıkları neden ayarlamam gerekiyor?