Я пытаюсь поддерживать 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?