Обслуживание запроса перед полетом с использованием ExpressJS - PullRequest
0 голосов
/ 03 июля 2019

Я создал простой маршрут в экспрессе, используя код ниже.

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)

EDIT

Основываясь на ответе Квентина, я попытался выполнить еще один запрос 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

1 Ответ

1 голос
/ 03 июля 2019

OPTIONS - это стандартный HTTP-метод со стандартным поведением, который имеет встроенную поддержку в Express .

Спецификация CORS накладывает дополнительную семантику поверх обычного запроса OPTIONS.

curl -X OPTIONS http://localhost:3000/route1 делает запрос OPTIONS, но он не имитирует запрос предварительной проверки (так как в нем отсутствует группа заголовков запросов, которые требуются в спецификации CORS). Ответ, который вы получите на этот запрос, также не включает заголовки ответа CORS.


Повторное редактирование:

Я попытался отправить еще один запрос OPTIONS с соответствующими заголовками

Вы пропустили заголовок Origin, но, как видите, поскольку вы не настроили поддержку CORS в приложении Express, ответ по-прежнему не включает заголовки ответа CORS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...