Joomla 1.5: Использование Ajax - Обходим политику единого источника
Индекс материала |
---|
Joomla 1.5: Использование Ajax |
Обработка на стороне сервера. |
Обработка на стороне клиента. |
Обходим политику единого источника |
Все страницы |
Как обойти политику единого источника веб-браузера в приложениях Ajax
Если Вы должны получить Ajax - доступ к веб-сервису, который не находится в Вашем домене, то Вы столкнетесь с проблемой: браузерной "политикой единого источника", которая из соображений безопасности, будет препятствовать этому. Есть несколько способов обойти это недоразумение, конечно, если вы доверяете этому веб-сервису.
Наиболее распространенный метод - это получить доступ к удаленному веб-сервису через прокси, работающий в Вашем домене. Этот метод обычно достаточно прост и позволяет обмениваться запросами методом POST, но может стать более геморройным, если удаленный сервер требует аутентификации или использует cookie, чтобы отследить состояние между запросами ( Но всё решаемо - PHP CURL форева! ) . Но как плюс, использование этотго метода обычно облегчает кэширование Ajax - ответов, что обычно является довольно трудной задачей.
Чтобы добавить простой прокси к Вашему Joomla - компоненту , Вы просто должны добавить дополнительную задачу к контроллеру. Допустим у нас есть некий хелпер - статический клиентский класс httpClient с методом call, который запросит страницу у удаленного сервера. Тогда вот пример реализации прокси:<?php /** * Поддержка кросс - доменных Ajax - запросов используя компонент "прокси". */ function proxy() { /* * Переписываем строку запроса * с учётом требований API реального сервиса: */ $uri = & JFactory::getURI(); $query = $uri->getQuery( true ); $query['option'] = $query['type']; unset( $query['type']); unset( $query['task']); if (isset( $query['request'] )) { $query['task'] = $query['request']; unset( $query['request']); } // Делаем запрос к API реального сервиса $response = httpClient::call( $query ); if ($response->status != '200') { JError::raiseError( 500, JText::_( 'Remote server error' ) ); return false; } // Возвращаем ответ клиенту. echo $response->data; jexit(); }
В строках 11 - 19 пример показывает, как обойти ситуацию, когда удаленный сервер также работает на Joomla, в этом случае он будет требовать URL содержащие option и task - GET переменных, которые могут не соответствовать тем, которые требуются для обращения к вашему прокси. Это нужно для того, если вы хотите сделать Ajax - запрос к удаленному серверу, используя этот адрес:
http://www.remoteserver.com/index.php?option=com_remotecomponent&task=remotetask&arg=something
Но вам нужно сначала отправить запрос на собственный прокси, расположенный по этому URL:
http://www.localserver.com/index.php?option=com_localcomponent&task=proxy&type=com_remotecomponent&request=remotetask&arg=something
Вам нужно будет адаптировать путь примерно, как показано выше.
Пока всё. Оригинал статьи
Проектирование волоконно-оптических линий связи на нашем сайте
Смотрите подробности Проектирование волоконно-оптических линий связи на нашем сайте.
www.ayu.group