Как стать автором
Обновить

Шпаргалка => Cross Domain AJAX. Dynamic script Tag Hack

Время на прочтение2 мин
Количество просмотров5.6K
Так сложилось исторически (из-за соображений безопасности), что Javascript-обьект XMLHttpRequest, который лежит в основе AJAX, не может делать кросс-доменные вызовы. Это бесполезное ограничение: для злоумышленников не представляет особой проблемы, а для разработчиков создает некоторое неудобство. В следующих поколениях браузеров эту проблему обещали решить, но не раньше чем W3C хотя бы одобрит новые стандарты.

Есть море хаков чтобы обойти это ограничение, но самый популярный это Dynamic Script Tag Hack. Именно через этот хак организован доступ к многим API современных веб-приложений.



Суть


XMLHttpRequest не используется вовсе. На странице динамически создается тег и указывается целевой адрес на другом домене. Браузер в фоновом режиме подргузит и исполнит содержание удаленного скрипта. Сам удаленный скрипт передает JSON данные и представляет из себя обычный вызов функции вида:

callback_function(json_data);

Функция `callback_function` должна находиться на странице и быть видна глобально. Она и будет обрабатывать возвращенные в JSON данные. Имя этой callback функции должно быть или же заранее известно как на стороне клиента, так и на стороне сервера, или передано GET параметром, например:

src="http://example.com/api.js.php?callback_func=mycallback"

Соответственно, удаленный скрипт, который выдает JSON данные должен выглядеть приблизительно так

<?php print $_GET['callback_func']. '('. json_encode($somedata). ')'; ?>

«Заключение»


Сам хак очень прост в использовании, тем не менее некоторые девелоперы не могут его понять слёту.
Разбирать JSON данные на клиентской стороне очень удобно. Если нужна дополнительная инфа, вот неплохая статья: An Introduction to JavaScript Object Notation (JSON)

Перенесено из личного блога как только набрал достаточно кармы
Теги:
Хабы:
Всего голосов 62: ↑44 и ↓18+26
Комментарии33

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн