Запрос CORS не был выполнен - ​​Cloudfront и ELB через HTTPS - PullRequest
0 голосов
/ 10 февраля 2019

Когда мы обращаемся к API-интерфейсу сервера ELB по URL-адресу https, выдается сообщение об ошибке

Запрос перекрестного источника заблокирован: политика одного источника запрещает чтение удаленного ресурса в https://abcde -1xx8x3xx3x.ap-юго-1.elb.amazonaws.com / апи / авт / TestApi .(Причина: запрос CORS не был выполнен).

Внешний интерфейс: Мы используем Cloudfront для доставки внешнего интерфейса от S3.URL-адрес облачного фронта работает, и страница загружается нормально.

На стороне облачного фронта в разделе поведения

  1. занесены в белый список заголовков [Accept, Access-Control-Allow-Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Authorization, Content-Type, Referer, X-Access-Token, X-HTTP-Method-Override, X-Requested-With]
  2. Политика просмотра Prorocol- Перенаправить HTTP на HTTPS
  3. Разрешенные методы HTTP - GET, HEAD, OPTIONS, PUT, POST .....

Backend: Backend nodejs rest apiнаходится в EC2 и доставляется через Интернет через систему Classic Load Balancer.EC2 находится внутри VPC.Мы используем ELB URL для тестирования API.API работает в Почтальоне.Здесь мы использовали протокол балансировки нагрузки в качестве HTTPS и протокол экземпляра в качестве HTTP.К этому приложен SSL-сертификат.

в приложении nodejs, мы устанавливаем заголовки, как показано ниже

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Request-Method', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');    
res.header('Access-Control-Allow-Headers','Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, Access-Control-Allow-Origin, Origin, X-HTTP-Method-Override, Accept, X-Access-Token');
res.setHeader('Access-Control-Allow-Credentials', 'true');

в коде шрифта при использовании fetch api, мы устанавливаем mode: 'cors'

Пробовал искать другие похожие проблемы cors, но ничего не помогло.

Может кто-нибудь подсказать мне, как решить эту проблему cors, чего мне здесь не хватает?Или есть лучший способ справиться с этим для производства?

1 Ответ

0 голосов
/ 10 февраля 2019

На самом деле это не ошибка CORS.Это проблема с подключением, которая связана с запросом CORS.

Reason: CORS request did not succeed

HTTP-запрос, использующий CORS, завершился неудачно, поскольку не удалось установить соединение HTTP в сети или протоколе.уровень.Эта ошибка не имеет прямого отношения к CORS, но является некоторой фундаментальной сетевой ошибкой.

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed

Возможно, вы несколько изменили URL https://abcde-1xx8x3xx3x.ap-south-1.elb.amazonaws.com/api/auth/testapi, но учтите, чточто невозможно использовать HTTPS для URL, заканчивающегося .elb.amazonaws.com.Это связано с тем, что невозможно получить сертификат SSL для доменного имени amazonaws.com - это доменное имя Amazon, а не ваше доменное имя.Вы не можете получить сертификат SSL для домена, который вы на самом деле не контролируете.Здесь вам нужен собственный домен и соответствующий ему сертификат SSL, прикрепленный к балансировщику.

Вы обнаружите, что, вставив этот URL-адрес API непосредственно в адресную строку браузера, вы также получить ошибку.Эта ошибка не будет ошибкой CORS, и это фактическая ошибка, которую необходимо устранить.

Обратите внимание, что ваши настройки S3 и CloudFront не связаны с ошибкой, которую вы описали.

...