前言
在开发过程中往往会遇到js跨域问题,在面试中跨域几乎是必考题。js跨域有很多方式,jsonp只是其中一种,许多人对jsonp似懂非懂,下面说一下js跨域原因以及jsonp原理。
同源策略
为安全考虑,Netscape提出了同源策略 Same-Origin-Policy(SOP)。url组成包括协议名,子域名,主域名,端口号只要协议,域名,端口有任何一个的不同,就被认为是跨域,即禁止页面加载或执行与自身来源不同的域的任何脚本。即使是 localhost:8080 请求 127.0.0.1:8080 也会被认为是跨域。
实现跨域有很多种方法:
- 服务端代理
- 服务端返回响应头Access-Control-Allow-Origin
- jsonp
- iframe嵌入页面
- html5 postMessage
jsonp原理
我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
浏览器中script、img、iframe、link这些包含 src 属性的标签可以加载跨域资源。但浏览器限制了JavaScript的权限使其不能读、写加载的内容。
简单来说,jsonp就是动态添加script标签引入src来实现跨域。
原生js
1 | //客户端 |
jquery实现
1 | $.ajax({ |