相信其他和我一样的小伙伴在学习node.js的时候都会碰到跨域的问题,之前真的是各种苦恼,以为是代码出了问题,查了很多资料知道啦原来是跨域的问题,现在总结两种方案分享给大家.
第一种解决跨域的法案jsonp
* 在ajax的datatype请求里增加jsonp
*后端:response.jsonp({数据})
优点:
* 兼容性好到令人发指
缺点:
* 不支持post请求
* 2.数据大的话,搞不定,文件上传搞不定
实现原理:
* 在head里面里面增加一个script标签,利用src属性不受跨域限制的特性
*向不同源的服务器发送一个get
* url中携带了一个callback参数
* 服务器接收到之后返回了一个函数的调用xxx{{name:'jack'}}
* 返回浏览器后解析成js调用

第二种解决方案:CORS(目前最为流行的方案)
-
前端:什么都不用做
-
后端:设置允许跨域
**express中:** 1. 响应数据之前:设置一个允许的header 2. response.header('Access-Control-Allow-Origin', '*'); 2. 无论用什么开发的后端:都需要设置上面类似的内容,才可以允许前端访问
优点:
- 目前用的最多的
- 用起来简单到令人发指
- get和post都支持
缺点:
- HTML5中推出的新标准,低版本浏览器不支持ie
- 兼容性比jsonp差一些
实现原理:
- 浏览器能够识别('Access-Control-Allow-Origin', '*');这个header
- 请求发给服务器之后,服务器返回的响应头中有一个允许的标记
- 浏览器就认为服务器允许跨域访问,没有了跨域的错误
ps:代码之路任重道远,让我们一起努力进步吧