跨域处理方式总结

开发中一定涉及到跨域的问题,应该怎么处理呢!下边总结一下常用的方式。

  1. jsonp 的方式

     jsonp跨域是一种比较常用的方式实现跨域,原理也比较简单,主要是通过js在页面建立script标签去请求,script是没有跨域的限制的,所以可以请求远程服务,jsonp有固定的格式callback({"a":"b"}),返回结果后,js通过callback这个作为函数名回调具体的js方法!一般用jquery 操作可能细节慢慢不再关注!但是理解了会发现很多东西

   这里注意jsonp只支持get请求,不支持post请求,而且jsonp是带不了本地cookie的

  2.类似上边的jsonp,iframe也是可以跨域请求   

   主域名相同,子域名不同可以设置document.domain 相同的根域名

  3.postmessage

   html5 中提供的方法,可以实现不同域名中跨域发送数据

   4.服务端设置访问域,可以跨域

     Access-Control-Allow-Origin 后边可以设置根域名,或者*,代表全部都可以跨域

     这种方式比较彻底,但安全性比较低  ,任何域名都可以使用啦,一般还是不太建议这么做

 

    5.代理的方式,比较好用,但配置比较多

     跨域就是因为不同的域名,浏览器限制而不能访问,我们就想办法让他们同域,这里就用到了代理的方式,代理可以实现许多都可以归到一个域名下,nginx可以轻松实现,服务端代码例如是x.a.com,客户端代码的域名x.b.com,一般服务都会在同一个idc,所以代理不会影响太大速度。具体实现方式如下

        location /bsite{
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-Ip $remote_addr;

                proxy_pass http://x.b.com/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_read_timeout 3600s;
        }

   为x.b.com 提供一个新的目录,如上bsite,原来访问x.b.com/a.com,通过上边设置之后,前端访问变成了:

    

x.a.com/bsite/a.html

     这样以后所有的请求都不跨域,你就可以按正常的方式走啦!

    还有方法,后边慢慢整理补充