解释JSONP 如何工作(以及它为什么不是真正的 Ajax)
Topics
JAVASCRIPT网络安全
在GitHub上编辑
JSONP (JSON with Padding) 是一种通常用来绕过网络浏览器中的跨域策略的方法,因为不允许从当前页面的 Ajax 请求到跨源域。
JSONP 工作方式是通过一个 <script>
标签向一个跨源域提出请求,通常使用一个 callback
查询参数, 例如:https://example.com?callback=printData
。 然后,服务器将把数据填充到一个名为 printData
的函数中,然后返回给客户端。
<!-- https://mydomain.com --><script>function printData(data) {console.log(`My name is ${data.name}!`);}</script><script src="https://example.com?callback=printData"></script>
// 从 https://example.com?callback=printData 加载的文件printData({ name: 'John Doe' });
客户端必须将printData
函数设在其全局范围内,当收到跨源域的响应时,该函数将由客户端执行。
JSONP 可能是不安全的,并涉及一些安全问题。 因为 JSONP 真的是 JavaScript,它可以做所有其它 JavaScript 可以做的事情,所以你需要信任 JSONP 数据的提供者。
目前前端开发领域,CORS 是推荐的方法,JSONP 被视为一种 hack(破解)。