跨域
1、JSONP实现
优缺点
- 优点: 无兼容性问题
- 缺点: 只能发送get请求(如果要实现post,参考下边文章)
[‘https://segmentfault.com/a/1190000015597029#articleHeader5']
JSONP实现方式
它的基本思想是,网页通过添加一个
<script>
元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
首先,网页动态插入<script>
元素,由它向跨源网址发出请求。(客户端代码)
1 |
|
上面代码通过动态添加<script>
元素,向服务器localhost:3000发出请求。注意,该请求的查询字符串有一个callback参数,用来指定回调函数的名字,这对于JSONP是必需的。
服务器端代码
1 | const http = require('http') |
服务器收到这个请求以后,会将数据放在回调函数的参数位置返回。1
foo({name: 'uthus'});
由于<script>
元素请求的脚本,直接作为代码运行。这时,只要浏览器定义了foo函数,该函数就会立即调用。作为参数的JSON数据被视为JavaScript对象,而不是字符串,因此避免了使用JSON.parse的步骤。
基于Promise,封装一个jsonp工具
1 | /** |
2、通过CORS 设置Access-Control-Allow-Origin为’*’
3、Nginx反向代理
参考文章
[‘https://segmentfault.com/a/1190000015597029#articleHeader5']
浏览器同源政策及其规避方法[‘http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html']
跨域资源共享 CORS 详解[‘http://www.ruanyifeng.com/blog/2016/04/cors.html']