читать оглавление
Углубленные междоменные проблемы (2) — Использование CORS для решения междоменных проблем
Углубленные междоменные проблемы (3) — Использование JSONP для решения междоменных проблем (эта статья)
Глубокая междоменная проблема (4) — используйте прокси-сервер для решения междоменной проблемы.
Что такое cross-domain, в этой статье я рассказывать не буду, эта статья в основном посвящена реализации JSONP.
script
Этикетка:
В соответствии с ограничениями политики одного и того же происхождения, впорт, доменное имя, протоколэти троеодна или несколько различных ситуаций, будут междоменные ограничения.
но,<script>
При доступе к тегам можно обойти эти ограничения политики одного и того же происхождения, но только с помощьюGET
метод:
Простой пример:
JSONP широко используется и используется крупными веб-сайтами: Douban, QQ Music и т. д. Ниже приведен простой интерфейс JSONP QQ Music:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Ajax测试</title>
</head>
<body>
<script>
function jsonCallback(data) {
console.log(data);
}
</script>
<script src="https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg"></script>
</body>
</html>
Откройте эту ссылку напрямую:
Вы можете видеть, что приведенная выше возвращаемая информация представляет собой строку строк, и вызов записывается в строку.jsonCallback()
функцию и передайте ей строку JSON.
Откройте консоль, вы увидите:
Вышеприведенный принцип реализации:
- использовать
script
теги, избегайте междоменного,<script src="url">
. - Объявите функцию на стороне клиента,
function jsonCallback() {}
. - На основе информации от клиента сервер выполняет поиск в базе данных и возвращает строку.
- клиент, используя
<script>
теги разрешаются в runnableJavaScript
код, звонитеjsonCallback()
функция.
На самом деле принцип прост.
Базовая реализация
В этом разделе мы в основном реализуем процесс.
Код клиента:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Ajax测试</title>
</head>
<body>
<script>
function jsonpCallback(data) {
console.log(data);
}
</script>
<!-- 负责解析字符串为 JavaScript 代码 -->
<script src="http://localhost:3000"></script>
</body>
</html>
Код на стороне сервера:
const http = require('http');
var data = { name: 'BruceLee', password: '123456' };
const server = http.createServer((request, response) => {
if (request.url === '/') {
response.writeHead(200, {
'Content-Type': 'application/json;charset=utf-8'
});
// 返回一段 JavaScript 代码
response.end( "jsonpCallback(" + JSON.stringify(data) + ")" );
}
});
server.listen(3000, () => {
console.log('The server is running at http://localhost:3000');
});
Здесь мы заканчиваем прямым возвратомнитьклиенту,<script>
теги будут анализироваться напрямуюнитьСодержимое внутри естьJavaScript
код, т.е. вызовjsonpCallback()
функция! ! !
Это базовое внешнее и внутреннее решение, использующее JSONP для решения междоменных проблем.
JSONP
а такжеCORS
контраст
JSONP
является очень ранним и зрелым решением, однако толькоGET
запрос, и такие операции, как загрузка данных, не могут быть реализованы.
И наоборот: CORS делится напредварительный запроса такжебез предварительного запроса, однако, без сомнения, поддерживаемые функции очень мощные! ! !
Ссылка и спасибо
- https://www.cnblogs.com/giggle/p/5496596.html
- https://blog.csdn.net/u011897301/article/details/52679486
Благодаря авторам двух приведенных выше ссылок они помогли мне понять суть JSONP.