Я понимаю, что этот вопрос о том, почему браузер считает JSONP безопасным, а не о том, безопасен ли он (а это не так).Я рассмотрю этот вопрос шаг за шагом.
Обычный AJAX
Для выполнения обычного запроса AJAX браузер создает XHR-объект , указывающий его на URLи тянет данные.Объект XHR будет доверять только данным из того же домена.Это жесткое ограничение.В текущих браузерах не обойти его (редактировать - теперь вы можете использовать CORS).
Решение - не использовать XHR
Поскольку XHR подчиняется одному и тому же домену poilicy, мы не можем использовать XHR для междоменного домена AJAX .К счастью, есть и другие способы поразить удаленный сервер.Мы могли бы добавить тег изображения к странице, например.Мы также можем добавить тег script и присвоить ему атрибут src, указывающий на удаленный сервер.Например, мы можем извлечь JQuery из CDN и ожидать, что он будет работать.
Как работает JSONP.
Когда мы делаем запрос JSONP, наш код динамически добавляет тег сценария кстраница .У тега script есть атрибут source, который указывает на удаленный URL-адрес JSONP API, как если бы вы вставляли скрипт из CDN.
Возвращаемый сервером JSONP-скрипт заключен в вызов функции .Когда скрипт загружен, функция будет выполнена автоматически.
Вот почему мы должны сообщить JSONP имя функции обратного вызова, в которую мы хотим обернуть скрипт. Эта функция будет вызвана после того, как скриптскачал.
Проблемы безопасности
Здесь есть довольно большие проблемы безопасности.Скрипт, который вы загружаете, может взять под контроль вашу страницу и подвергнуть ваших пользователей риску.JSONP небезопасен для ваших пользователей, он просто не блокируется веб-браузерами. JSONP - это браузер, которым мы пользуемся .Используйте с осторожностью.
При грамотном использовании JSONP довольно хорош.