Как избежать проблем с разными источниками при запросе данных из субдомена?

На моем сайте www.example.com я отправляю запрос ajax на поддомен:

function submit(json_data) {
  return $.ajax({
     type: 'POST',
     url: "https://sub-domain.example.com",
     data: json_data
  });
}

https://sub-domain.example.com указывает на другой IP-адрес (на Amazon ec2), чем пример.com. Раньше все это работало нормально. Однако, когда я изменил example.com только на HTTPS, я начал получать такие ошибки, как следующие:

XMLHttpRequest не может загрузить https://sub-domain.example.com. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'https://www.example.com' запрещен. Ответ имел код состояния HTTP 522.

Я использую Cloudflare. Какой простой способ исправить эту ошибку?

  • Могу ли я изменить настройку в Cloudflare, чтобы не было проблем? Я думал создать страницу по адресу example.com/sub-domain, которая указывала бы на тот же IP-адрес, что и раньше, но это казалось невозможным.
  • Есть ли простое изменение, которое я могу внести в запрос? Я пытался использовать jsonp, но это не сработало с POST.
  • Если это невозможно, как мне изменить фактический поддомен, чтобы разрешить такие запросы от example.com?

person am-rails    schedule 16.12.2014    source источник
comment
Похоже, вам придется настроить заголовки CORS в Cloudflare. Это сообщение в блоге может помочь   -  person Dave    schedule 16.12.2014


Ответы (2)


Вы должны включить запросы cors в своем поддомене, и это достигается путем разрешения домену www.example.com отправлять запросы к вашему поддомену.

Проверьте эту страницу, возможно, она вам поможет.

person José Pinto    schedule 16.12.2014

Попробуйте добавить

config.action_dispatch.default_headers['Access-Control-Allow-Origin'] = '*'

в application.rb и перезапустив сервер приложений.

person tagCincy    schedule 16.12.2014
comment
Я мог бы добавить это на example.com? Поскольку sub-domain.example.com не является приложением Rails. - person am-rails; 16.12.2014
comment
Поместите его в приложение, делающее запрос. Я считаю, что он добавляет этот заголовок ко всем ответам, полученным приложением. - person tagCincy; 16.12.2014
comment
Вам нужно установить заголовок Access-Control-Allow-Origin, отправляемый доменом, на который идет запрос, в вашем случае sub-domain.example.com. Это делается для того, чтобы люди не могли делать запросы к вашему серверу с неавторизованных доменов. - person Jonathan Bender; 16.12.2014