У меня есть 2 домена (домен A, домен B).
На домене A помещено приложение ZF2, и все в порядке.
На домене B размещается Landing Page (небольшой сайт с формой для сбора данных).
Из целевой страницы я хочу отправить данные формы в приложение на домен A (запрос AJAX).
Unfortunatelly Приложение ZF2 в домене A не получало данных и не показывало результатов. Все нормально, когда я делаю запрос AJAX из того же домена, где есть приложение ZF2.
Я пробовал использовать JSONP, но безуспешно.
У меня нет другого понятия, как заставить это работать.
Как сказал ответ Bodgan, это проблема безопасности браузера, а не проблема ZF2. Один из популярных способов обойти это – изменить ACCESS-CONTROL-ALLOW-ORIGIN
вашего домена A, чтобы разрешить запросы из домена B. Этот и другие решения обсуждаются на странице Mozilla Developer Network (MDN) для контроля доступа HTTP (CORS ) .
В основном вам необходимо указать получающему серверу (домен А), что он может отвечать на запросы ресурсов. Вы можете сделать это в файле .htaccess
размещенном в корневом каталоге домена A. Ниже приведен простой пример кода, который указывает домену A, что он должен отвечать на запросы совместного использования ресурсов из всех доменов: *
. В статье MDN, приведенной выше, содержится более подробное обсуждение «Совместного использования ресурсов (CORS)». Имейте в виду, что есть последствия для безопасности, и в большинстве сценариев вы не хотите открывать свой сервер для запросов от *
origins, а скорее к определенному хосту, контролируемому вами самим.
Options +FollowSymlinks RewriteEngine on Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Вы можете изменить файл htaccess для поддержки, но самым простым способом будет использование класса ответа:
$this->_response->setHeader('Access-Control-Allow-Origin', '*');
http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html
Если вы используете json в качестве источника данных конечной точки, используйте его в сочетании с помощником json, который будет устанавливать ваши заголовки кодировки и несколько других вещей
$this->_helper->json->sendJson($jsonIsite);
http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html
есть https://github.com/zf-fr/zfr-cors для продвинутых CORS с ZF2, но простая конечная точка json с приведенным выше должна работать нормально.
Кросс-доменные запросы ajax запрещены по соображениям безопасности (это называется той же политикой происхождения). http://en.wikipedia.org/wiki/Same_origin_policy