Joomla 1.5: Использование Ajax - Обходим политику единого источника

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

Вам нужно будет адаптировать путь примерно, как показано выше.

Пока всё. Оригинал статьи



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 104 гостей онлайн