В серверной части Rails API отсутствует заголовок "Access-Control-Allow-Origin"

У меня есть jsonapi-resources бэкэнд API в Rails. Я могу запросить данные, используя curl как и в Python.

Когда я пытаюсь использовать jQuery по запросу я получаю в браузере следующую ошибку:

XMLHttpRequest не может загрузить https://shop-api-3.herokuapp.com/customers?filter%5Bshop_token%5D=9e3c9769b752436ddbd27597cf946a36. Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Происхождение 'null', следовательно, не разрешено. Ответ имел HTTP-код состояния 404.

Поэтому я добавил это к config/environments/production.rb:

  config.action_dispatch.default_headers = {
      'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Request-Method' => '*',
      'X-Frame-Options' => 'ALLOWALL'
    }

Тем не менее, я все еще получаю ту же ошибку. Что мне не хватает?

FWIW, это мой curl команда:

curl -i -H "Accept: application/vnd.api+json" "https://app.herokuapp.com/retentions?filter%5Bshop_token%

5D = ABC123"

Использование Rails 4

1 ответ

У меня была такая же проблема месяц назад, и после прочтения множества постов в блоге, я решил ее с помощью...

Таким образом, похоже, что вы запрашиваете API-токен на другом сервере, используя jquery(из браузера) вместо того, чтобы делать это, запросите его с вашего сервера и получите его, передав его клиенту, и затем вы сможете делать все, что захотите, это должно сработать.

Насколько я понимаю, это CORS: вы не можете делать браузер на сервере, вы должны делать это с сервера (вашего домена) на сервер (API, к которому вы обращаетесь).

Надеюсь это поможет!

Другие вопросы по тегам