Невозможно выполнить ajax-вызов между серверами, которые отличаются только портом в стеке HTML5 / jQuery / Chrome - PullRequest
5 голосов
/ 19 февраля 2011

Детали

Я работаю на двух серверах Pylons и тестирую их локально.Один сервер находится на порту 5000 и является вызываемым сервером.Другой находится на порту 7000. Последний создает cookie, который указывает тот же домен, который использовался предыдущим сервером.По сути, первый сервер использует учетные данные, предоставленные вторым сервером, для олицетворения пользователя.

Первый сервер ожидает найти токен аутентификации (действительно cookie) в своем response.environ во время выполнения.Когда я проверяю подлинность на сервере через порт 7000 и в браузере для службы на порту 5000, последний сервер использует cookie, созданный первым, и приложение работает.

Мухой является то, что первый сервер создаетприложение HTML5, которое использует вызов ajax на второй сервер, и я не могу включить cookie в вызов ajax.Я считаю, что Chrome (браузер, который мы используем / запрашиваем по причинам поддержки HTML5) отказывается отправлять cookie по междоменным причинам: переход от foo.net:7000 до foo.net:5000 считается междоменным.

О, ивызов ajax осуществляется через jQuery.

Вопрос

Есть ли способ сделать вызов ajax из приложения HTML5, созданного на порте в том же домене, на сервер в том же домене, нодругой порт?

То, что я пробовал или выбрасывал из-под контроля

Я не верю, что могу использовать динамическую вставку тега сценария , потому что я звоню изjavascript и HTML генерируется на клиенте во время выполнения из другого javascript.По крайней мере, я не думаю, что это желательное решение.

Я не верю, Access-Control-Allow - * применимо, потому что я иду от клиента к серверу, а недругой путь.

Я видел это на jQuery и портах в вызовах ajax .Я видел это тоже.

Я знаю о политике того же происхождения .

И это не работает .

Ответы [ 2 ]

1 голос
/ 20 марта 2011

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

1 голос
/ 20 марта 2011

Абсолютно самое простое решение - использовать JSON / P.Хотелось бы, чтобы был более простой и мягкий способ сделать это, но я, конечно, не нашел его.

...