CORS при отправке и получении

опять вопрос про CORS поднимаю сервер на 9000м порту на nodejs + node modules express ( в браузере - работает ) поднимаю второй проект, на котором делаешь API запрос к серверу в консоле вижу - Provisional headers are shown, хотя вроде всё прописано

Господа, посоветуйте, как правильно отправить и принять запрос?

// server
const express = require("express")
const app = express()

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', '*');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

app.get("/api", (req, res) => {
    res.send({})
})

app.listen("9000")


// и ест-но охота получить эти данные ( в ответе -> [] )
fetch("http://localhost:9000/api", {
    headers: {
        "Allow": "*",
        "Access-Control-Allow-Origin": "*",
        "Content-Type": "application/json; charset=utf-8",
    }
})
.then(response => response.json())
.then(json => {console.log('+++')})
.catch(e => console.error(e))

p.s. да, про CORS уже тыщу раз писали, но вот вроде все заголовки учтены, и прям теряюсь, что не та


Ответы (1 шт):

Автор решения: viiprogrammer

Вы шлете заголовок который не был разрешен - Access-Control-Allow-Origin и Allow который шлет сам браузер, даже если его не указать

Для того чтобы их разрешить нужно заменить:

res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

на

res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Allow,Access-Control-Allow-Origin');

или разрешить любые заголовки так:

res.setHeader('Access-Control-Allow-Headers', '*');

Так же хочу обратить внимание что заголовок Access-Control-Allow-Origin должен отдавать сервер и его не требуется отправлять с браузера на клиенте, так что можно его убрать.

→ Ссылка