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
Вам нужно будет адаптировать путь примерно, как показано выше.
Пока всё. Оригинал статьи
Joomla 1.5: Использование Ajax - Обходим политику единого источника