Я намагаюся підтримувати 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) не надсилає початковий запит OPTIONS. Коли я щойно оновив блок для ресурсу, мені потрібно подати запит 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 добре.
Отже, моє головне питання: як це не здається в моєму випадку? Чому не викликається мій блок app.options? Чому мені потрібно встановити заголовки в головному блоці app.get?