1、JSONP
全称:JSON with Padding
概念:原理就是利用script标签不受同源策略的限制,在页面中动态插入了script,script标签的src属性就是后端api接口的地址,并且以get的方式将前端回调处理函数名称告诉后端,后端在响应请求时会将回调返还,并且将数据以参数的形式传递回去。
优劣:这种方式只能发生get请求、确定jsonp的请求是否失败并不容易,大多数框架的实现都是结合超时时间来判定、不太安全,可能也会受到攻击、它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题;很简单、老式浏览器全部支持,服务器改造非常小。
2、Proxy
优劣:不能用在生产环境,只能用在开发环境;dev环境配置很简单,支持多个域名
3、CORS
全称:Cross Origin Resource Sharing(跨域资源共享)
概念:CORS是一种允许当前域(origin)的资源被其他域(origin)的脚本请求访问的机制
优劣:部分老的浏览器不支持;支持所有Http谓词请求、不用注意接口规则、可用在生产环境
4、Nginx
概念:nginx解决跨域,是利用其反向代理的能力
跨域原理:首先,直接在浏览器地址栏中,输入某接口地址,是不会产生跨域问题的。只有当在某域名的页面中,由该页面发起的接口请求,才可能会跨域。nginx就类似于这个浏览器,它接收到外部对它的请求(注意:nginx只会接收别人对它的请求,而不会拦截浏览器的请求),再类似浏览器地址栏一样去请求某个接口,最后将请求到的内容返回回去。
优劣:移植灵活性低,每套环境配置可能均不相同;对立性强的小项目,使用nginx则可以降低你的开发成本,快速开发快速上线。
5、Socket
概念:WebSocket是一秒通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。