422 ошибка отсутствует заголовок ответа Access-Control-Allow-Origin - PullRequest
0 голосов
/ 27 января 2020

1) Мое приложение реакции было размещено в корзине S3, обслуживаемой Cloudfront с настраиваемым доменом.

2) Затем мой сервер API Express работает на экземпляре Lightsail с Nginx / PM2.

Теперь у меня возникает проблема 422 CORS при вызове конечной точки из моего React , Я пробовал следующее:

1) Добавьте следующие правила CORS в корзину S3, которая содержит активы моего приложения React:

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

2) Вставьте сюда конфигурацию Nginx https://enable-cors.org/server_nginx.html на серверный блок моего API:

server {
  location / {
     proxy_pass http://localhost:3000
     ...
     ...
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
     ...
     ...

3) На странице «Поведения» моего облачного дистрибутива приложения React:

  • 'Кэш на основе выбранного Заголовки запроса '-> Белый список заголовка Origin
  • Разрешены все методы http ...
  • Переслать все файлы cookie ...
  • Переслать все' Пересылка и кэширование строки запроса 'тоже ...

Но все равно не повезло.

Я могу получить ответ от запуска этого: curl -s -D - -H "Origin: https://app.react.app" https://api.react.app/isOnline

curl -i -X OPTIONS https://api.react.app/isOnline дает мне HTTP/1.1 204 No Content успеха.

Что еще я могу попробовать ...? Цени любые указатели ..

1 Ответ

2 голосов
/ 28 января 2020

Если вы хотите, чтобы заголовок Access-Control-Allow-Origin был включен в ответ об ошибке 422 или другой ответ 4xx, то вам нужно добавить параметр always в ваши директивы add_header, например:

add_header 'Access-Control-Allow-Origin' '*' always;

В противном случае, если вы не включите этот параметр always, nginx добавит только заголовок Access-Control-Allow-Origin к 2xx успешным ответам и 3xx перенаправлениям - но не к 4xx ошибок. См. Документы в https://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header.

...