JQuery Ajax из дочернего домена - PullRequest
1 голос
/ 22 февраля 2011

Мне нужно сделать XHR из дочернего домена, например child.api.com -> api.com. Обычно это можно сделать, установив атрибут document.domain в тот же базовый домен (api.com).

   1. $.ajax({
   2.               url: url,
   3.               data: [],
   4.               beforeSend: function(jqXHR,settings){
   5.                   document.domain = 'api.com';
   6.                   console.log('before send:' + document.domain);
   7.               },
   8.               success: function(resp){
   9.                   console.log('success!');
  10.               },
  11.               error: function(jqXHR,textStatus,errorThrown){
  12.                   console.log('error: '+jqXHR.responseText);
  13.               },
  14.               dataType: 'json'
  15.             });

Но это не удалось. Это журнал: перед отправкой: api.com XMLHttpRequest не может загрузить http://api.com/sites/sandbox/users/1/recommendations.json. Источник http://child.api.com не разрешен Access-Control-Allow-Origin. index.html: 56error: Рекомендации.jsonНе удалось загрузить ресурс

Что я делаю не так?

Привет, Chielus

1 Ответ

0 голосов
/ 22 февраля 2011

Ваш браузер отправляет запрос CORS.Это означает, что запрос достигает сервера, сервер отправляет ответ - как вы можете наблюдать в Wireshark, браузер проверяет заголовок Access-Control-Allow-Origin: * ответа, не находит его и блокирует ответ.Это именно то, что говорится в вашем сообщении об ошибке: not allowed by Access-Control-Allow-Origin.

То, что вы делаете неправильно, предполагает, что document.domain имеет какое-то значение.

Рассмотрите этот сценарий: вы хостингблоги отдельных пользователей на поддоменах, но интерфейс управления учетными записями и публикациями находится на вашем основном домене (подумайте Tumblr).Если document.domain что-то изменило для междоменных запросов, я мог бы разместить на своем блоге какой-нибудь javascript и публиковать спам (при условии, что вы прошли аутентификацию с помощью службы), и никакая защита CSRF не остановит меня.

То, к чему относится document.domain, это межкадровая связь.Например, вы можете загрузить страницу из api.com в iframe на своей верхней странице, для этой страницы iframe следует явно указать document.domain = 'api.com' , затем вы можете установить document.domain = 'api.com' для верхней страницы, и вуаля, вы можете передавать данныемежду вашей главной страницей и iframe вызовите функции и попросите страницу irfame сделать ajax-запросы для api.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...