Это потому, что Access-Control-Allow-Headers
, Access-Control-Allow-Methods
- это заголовки, которые используются сервером.Сервер добавляет заголовок с помощью промежуточного программного обеспечения.
Теперь представьте себе на сервере (в этом примере ниже экспресс-сервер) с включенным CORS устанавливаются следующие типы (по умолчанию) заголовков:
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Accept');
});
И вы отправляете Access-Control-Allow-Headers
со стороны клиента, и сервер видит это как заголовок, который не находится в белом списке.
Итак, в заголовках просто используйте:
headers: {
'content-type': 'application/json',
'Authorization': 'Client-ID [my-client-id]'
}
Это должно работать нормально.
Кстати, я думаю, что это работает с почтальоном, потому что:
- Почтальон не может установить определенные заголовки, если вы не установите это крошечное расширение захвата почтальона.
- Безопасность браузера останавливает запросы перекрестного происхождения.Если вы отключите Chrome Security, он будет отлично выполнять любой запрос CORS.
Кроме того, в соответствии с this :
Я полагаю, что это может произойтибудь то, что Chrome не поддерживает localhost
, чтобы пройти через Access-Control-Allow-Origin
- см. вопрос Chrome
Чтобы Chrome отправлял Access-Control-Allow-Origin
в заголовке, просто добавьте псевдоним localhost в свойФайл / etc / hosts в другом домене, например:
127.0.0.1 localhost yourdomain.com
Тогда, если вы получите доступ к вашему скрипту, используя yourdomain.com
вместо localhost
, вызов должен завершиться успешно.
Примечание: я не думаю, что тип контента должен быть application/json
, он должен быть как image/jpeg
или что-то в этом роде.Или, возможно, не включайте этот заголовок, если он не работает.