Saya mencoba untuk mendukung CORS dalam aplikasi Node.js saya yang menggunakan kerangka kerja Express.js. Saya telah membaca diskusi grup Google tentang cara menangani ini, dan membaca beberapa artikel tentang cara kerja CORS. Pertama, saya melakukan ini (kode ditulis dalam sintaks 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'
# ...
Sepertinya tidak berhasil. Sepertinya browser saya (Chrome) tidak mengirimkan permintaan OPSI awal. Ketika saya baru saja memperbarui blok untuk sumber daya saya perlu mengirimkan permintaan GET lintas-asal ke:
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'
# ...
Ini berfungsi (di Chrome). Ini juga berfungsi di Safari.
Saya telah membaca bahwa ...
Di browser yang menerapkan CORS, setiap permintaan GET atau POST asal silang didahului oleh permintaan OPSI yang memeriksa apakah GET atau POST OK.
Jadi pertanyaan utama saya adalah, mengapa ini tidak terjadi dalam kasus saya? Mengapa blok app.options saya tidak dipanggil? Mengapa saya perlu mengatur header di blok app.get utama saya?