Для включения CORS с простым nodejs http-сервером (без использования Express framework) не существует промежуточной архитектуры, которая могла бы устанавливать желаемые заголовки и затем продолжать маршрутизацию к другим обработчикам запросов, поэтому вам придется это делать В фактическом обработчике запросов.
FYI, архитектура промежуточного программного обеспечения является одним из основных преимуществ инфраструктуры Express, которая позволяет вам устанавливать политики CORs в одном месте, которое может использовать множество обработчиков запросов.
В любом случае, вот как это выглядит для простого nodejs входящего запроса http-сервера.
// add new listener to the http server for requests
server.on('request', (req, res) => {
// check if this is the path we are interested in
// if there could be query parameters, then you have to parse them off first
if (req.url === "/somePath") {
// If desired, set these more specifically such as only specific origins
// or CORS only allowed on specific methods
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
// add other headers as needed
};
// if pre-flight request, handle it here
if (req.method === 'OPTIONS') {
res.writeHead(204, headers);
res.end();
return;
} else if (req.method === "GET") {
res.writeHead(200, headers);
// handle rest of the GET request here
// ...
res.end();
} else {
res.writeHead(405);
res.end();
}
}
});
Вот статья на общую тему c: Включение CORS в nodejs http-сервер без Express.
Обработка запроса OPTIONS - это то, что многие люди не понимают или не знают, что вставить. Для CORS это называется «предполетным» "запрос и при некоторых обстоятельствах браузер будет использовать запрос OPTIONS в качестве проверки разрешений, чтобы увидеть, разрешает ли сервер запрос перед фактической отправкой г реальная просьба. Если браузер решит это сделать, предполетный запрос также должен иметь соответствующие заголовки CORS, поскольку именно так браузер решает, разрешить запрос или нет.
Существуют различные обстоятельства, которые вызывают браузер оформить предполетный запрос. В двух словах, это любой запрос, который спецификация CORS не определяет как «простой». Вы можете прочитать больше об этом здесь . Что может сделать запрос непростым: пользовательские заголовки, кроме нескольких выбранных, любой глагол, отличный от GET, HEAD или POST, заголовок Content-Type в запросе, отличный от application/x-www-form-urlencoded
, multipart/form-data
или text/plain
и и так далее ...
Если вам требуется, чтобы учетные данные отправлялись вместе с запросом перекрестного происхождения (например, cookie-файлы), существуют дополнительные ограничения, которые можно прочитать о здесь .