Разрешение Jquery отклонено - другое доменное имя - PullRequest
0 голосов
/ 03 августа 2009

Я разработал набор apis, которые живут в mvc-приложении asp.net, но будут получены из браузера, получающего доступ к нашему основному сайту (который находится в стеке LAMP).

Доменные имена выглядят так:

http://www.mainsite.org

API,

http://apis.www.mainsite.org (изначально apis.mainsite.org, но я внес изменение в попытке решить проблему)

Я делаю запрос $ .ajax () к API, который, в свою очередь, отправляет простой html, чтобы вывести форму ввода в div.

Конфигурация работает нормально, когда я запускаю примерную страницу хоста, которая находится на моем сайте apis, но когда я помещаю эту же страницу на сайт за пределами apis.www.mainsite.org, я получаю ошибку «Отказано в доступе» в IE по первому запросу к сервису.

Мне кажется, что некоторые ресурсы говорят, что я должен реализовать JSONP, чтобы заставить это работать правильно и сделать так, чтобы междоменный скрипт вызывался таким образом, - но я надеюсь, что смогу включить эту функцию, все еще возвращая вместо этого html JSON.

Любые предложения будут с благодарностью.

Еще один вопрос - есть ли идея, почему запрос XMLhttp от http://mysite.org до http://api.mysite.org будет считаться междоменным? Делает ли какое-либо изменение в имени домена междоменный вызов?

Кажется довольно распространенным сценарием отделения домена для API от основного домена контента, и я надеюсь, что мне просто не хватает чего-то простого.

С уважением и спасибо за ваше время.

Hal

Ответы [ 2 ]

2 голосов
/ 03 августа 2009

Следующий пост может пролить больше света на технику взлома тегов:

Почему я не получаю предупреждение «Политика одинакового происхождения» при использовании API Карт Google?

Короче говоря, вы не можете совершать междоменные вызовы с помощью XmlHttpRequest (именно это используют jquery и ext-js). Тег <script> защищен от таких правил. Хитрость заключается в том, чтобы вставить URL с параметрами, чья страница возвращает JSON, используя эти параметры, чтобы сформулировать вызов обратного вызова в вашем коде JavaScript.

РЕДАКТИРОВАТЬ: Чтобы ответить на другой ваш вопрос, доменная часть вашего URL должна точно соответствовать. См. Следующую статью в Википедии, где приведены примеры кросс-доменных и однотипных вызовов:

http://en.wikipedia.org/wiki/Same_origin_policy

2 голосов
/ 03 августа 2009

Это называется «Политика одинакового происхождения», что означает, что Javascript не может получить доступ к страницам вне своего домена.

Да, любое изменение вызовет междоменный вызов. Я предлагаю сделать символическую ссылку на каталог с именем /api, который позволит перенаправить каталог туда, где вы храните файлы api.example.com. Это бы выглядело абсолютно одинаково. Так что api.example.com и example.com/api ссылаются на одну и ту же папку. Это, вероятно, исправит вашу ситуацию.

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

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