AJAX跨域分析

产生跨域问题的原因

    1.浏览器限制

        很多人认为,发生跨域问题,是服务器后台不允许前台调用,进行了限制,这个观点是错误的。真正的原因是,当浏览器发现你的请求是跨域的时候,它会做一些校验,如果校验不通过,它就会报跨域安全问题。

        为了验证这个观点,我们发现当请求调用时,network中请求状态是200,也有返回值,这说明后台能够正常的处理我们的请求。



        然而控制台却会有报出跨域的问题。


  

  2.跨域

        我们的请求中:协议、域名和端口,任何一个不一样,浏览器都会出现跨域的问题。

  

  3.XHR(XMLHttpRequest)请求

        当我们再添加一个图片请求时


        但是,控制台只有一条报错。


        我们看一下network中,发现,新添加的请求type是json,由此可以看出,只有当请求类型是xhr是,才会出现跨域的问题。




解决思路

    1.针对浏览器限制

        通过修改浏览器的参数,让浏览器不做这个限制。但是这个方法意义不大,因为他需要客户端每个人都进行调整,这个不太现实。


    2.针对请求类型

        只要发出去的不是XHR请求,就不会产生跨域问题,针对这个思路,我们可以采用JSONP请求。JSONP是通过动态创建一个script标签,在script中发生请求。

     

    3.针对跨域

        然而基于JSONP的解决方案有很多弊端,他越来越无法满足现有的开发要求,所以用的越来越少了。所以解决跨域问题重点都是放在针对跨域的问题。

        这里有两种解决思路,一种是被调用方修改代码,让他支持跨域,支持基于HTTP协议关于跨域方面的要求而做的修改。也就是说在从A域名调用B域名的时候,在B域名返回的信息里边,加入一些字段,告诉浏览器,我允许A域名调用,那么浏览器通过校验,他就不会报跨域安全问题了,这是支持跨域的思路。

        那么,如果被调用方不是自己公司的,无法作上述的修改,那就需要第二种思路:调用方做修改。这种思路是隐藏跨域,被调用方修改是支持跨域,调用方修改是隐藏跨域。隐藏跨域就是通过代理,从浏览器发出的都是A域名的请求,在代理里边把制定的URL转到B域名里边,在浏览器看上去就是同一个域名,就没有跨域的问题,所以跨域的问题也可以解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值