Задать вопрос
@mayorovp

Как правильно сделать кросс-доменный редирект в AJAX-запросе?

Используется следующий сценарий.

1. Пользователь запрашивает страницу _http://example.com/

2. Страница содержит скрипт, делающий запрос на _http://example.com/foo

3. Обработчик _http://example.com/foo делает редирект на _http://localhost:9600/bar



Далее по плану — long pooling и обратный редирект, но до этого даже не доходит — сразу после редиректа на _http://localhost:9600/bar AJAX-запрос завершается с ошибкой, в инспекторе у запроса виден статус CANCELLED, на странице chrome://net-internals/#events видно, что запрос завершился из-за события URL_REQUEST_BLOCKED_ON_DELEGATE с пометкой CANCELLED.



Сначала помогло выставление параметра crossDomain у запроса и выдача заголовка Access-Control-Allow-Origin: * на стороне локального сервера, но потом проблема неожиданно вернулась.



Запуск браузера с параметром --disable-web-security помог, но очевидно, что это — временное решение. Поэтому у меня вопрос: какая из фич, входящих в состав web security, блокирует данный редирект, и как можно ее обойти? Оба сервера — мои, есть полный доступ к заголовкам и файлам в корне.



И, если на первый вопрос никто не знает ответа, то второй вопрос: какие вообще фичи входят в состав web security и где можно увидеть их список?
  • Вопрос задан
  • 4363 просмотра
Подписаться 3 Оценить 5 комментариев
Решения вопроса 1
@mayorovp Автор вопроса
Длительное изучение проблемы показало, что запрос, начавшийся как внутридоменный, не может иметь кросс-доменного "продолжения" в принципе.

Проблему решил стандартно - отдавая редирект в ответе, и генерируя после этого новый запрос.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Aleks_ja
@Aleks_ja
Попробуйте через JSONP
Ответ написан
ghaiklor
@ghaiklor
NodeJS TechLead
Можешь просто JSON тоже использовать. Только тогда нужно в header, который принимает данные, прописать разрешение на это дело:
Access-Control-Allow-Origin: *
Ответ написан
@rozhik
В ответе установите заголовки
Access-Control-Allow-Origin: _http://example.com/
Access-Control-Allow-Methods: GET, OPTIONS
И почитайте это
Ответ написан
@tnz
Как на счет скрытого айфрейма с postMessage прокси в основной фрейм? Есть даже готовые либы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы