Я создал простой маршрут в экспрессе, используя приведенный ниже код.
const express = require("express");
const app = express();
app.get('/route1', (req, res) => {
res.send({ data: "Route 1" });
});
app.listen(3000);
Когда я запускаю curl -X GET http://localhost:3000/route1, я получаю {"data":"Route 1"} в ответ.
Однако я попытался запустить curl -X OPTIONS http://localhost:3000/route1, чтобы имитировать предварительный запрос CORS. Я получил GET,HEAD в качестве ответа.
Я не смог найти никакой документации, подтверждающей это поведение. Почему указанный выше маршрут ответил на запрос OPTIONS?
(ПРИМЕЧАНИЕ: я не использовал другие пакеты, такие как CORS)
РЕДАКТИРОВАТЬ
Основываясь на ответе Квентина, я попытался отправить еще один запрос OPTIONS с соответствующими заголовками и с флагом отображения заголовков в curl.
curl -i -X OPTIONS http://localhost:3000/route1 \
-H 'Access-Control-Request-Method: POST' \
-H 'Access-Control-Request-Headers: content-type,x-requested-with'
HTTP/1.1 200 OK
X-Powered-By: Express
Allow: GET,HEAD
Content-Type: text/html; charset=utf-8
Content-Length: 8
ETag: W/"8-ZRAf8oNBS3Bjb/SU2GYZCmbtmXg"
Date: Wed, 03 Jul 2019 11:14:07 GMT
Connection: keep-alive
GET,HEAD



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


OPTIONS — это стандартный метод HTTP со стандартным поведением, которое имеет встроенная поддержка в Express.
Спецификация CORS накладывает дополнительную семантику поверх обычного запроса OPTIONS.
curl -X OPTIONS http://localhost:3000/route1 делает запрос OPTIONS, но он не имитирует предварительный запрос (поскольку в нем отсутствует набор заголовков запроса, которые требуются спецификацией CORS). Ответ, который вы получаете на этот запрос, также не содержит заголовков ответов CORS.
Повторное редактирование:
I tried issuing another OPTIONS request with relevant headers
Вы пропустили заголовок Origin, но, как видите, поскольку вы не настроили поддержку CORS в приложении Express, ответ по-прежнему не включает заголовки ответа CORS.