Sto cercando di supportare CORS nella mia applicazione Node.js che utilizza il framework Web Express.js. Ho letto una discussione di gruppo di Google su come gestirlo e ho letto alcuni articoli su come funziona CORS. Innanzitutto, l'ho fatto (il codice è scritto nella sintassi 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'
# ...
Non sembra funzionare. Sembra che il mio browser (Chrome) non stia inviando la richiesta OPTIONS iniziale. Quando ho appena aggiornato il blocco per la risorsa, devo inviare una richiesta GET tra origini a:
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'
# ...
Funziona (in Chrome). Questo funziona anche in Safari.
Ho letto che ...
In un browser che implementa CORS, ogni richiesta GET o POST di origine incrociata è preceduta da una richiesta OPTIONS che controlla se GET o POST sono corretti.
Quindi la mia domanda principale è: come mai questo non sembra accadere nel mio caso? Perché il mio blocco app.options non viene chiamato? Perché devo impostare le intestazioni nel mio blocco app.get principale?