Проблема CORS в Node / Express, если мы удалим www prefix - PullRequest
0 голосов
/ 06 мая 2020

У нас есть сервер NodeJS / Express, который загружает игру HTML5, которую мы храним на сервисе вне нашего сервера (например, Amazon S3). Игра должна взаимодействовать с нашим сервером статистики по-прежнему на нашем сервере NodeJS / Express, но поскольку он находится в другом домене, чем запущенная игра, мы столкнулись с проблемами CORS. Мы исправили это, используя модуль Node cors и сделав это с помощью нашего маршрута:

router.put("/stats/", cors(), async (req, res) => { ...

Все в порядке, но мы только что узнали, если вы посетите наш веб-сайт БЕЗ www prefix это все еще дает проблему CORS. Как если бы вы пришли к нам по номеру www.example.com, все работает, игра загружается и может возвращать статистику. Но если вы посетите нас на example.com, игра все равно загрузится, но выдает следующую ошибку:

Access to XMLHttpRequest at 'https://www.example.com/api/stats/' from origin 'https://example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Насколько я понимаю, как мы используем пакет cors, он должен включать все запросы cors на этот маршрут. Так почему он блокирует это?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Если вы используете cors lib из nodejs. Вы можете настроить cors для поддержки обоих доменов.

Например:

const cors = require('cors')
//cors config
app.use(cors({
  origin: ['https://example.com', 'https://www.example.com']
  methods: "GET, POST, PUT, DELETE",
  optionsSuccessStatus:200,
  credentials: true
}))
0 голосов
/ 08 мая 2020

Ну, никто никогда не отвечал, но нам удалось решить эту проблему, просто используя перенаправление имени хоста 301. Все еще не уверен, почему CORS не работает, но это устраняет нашу специфическую проблему c.

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