AJAX跨域产生原因及解决方法

什么是跨域:

        跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等 

AJAX产生跨域原因:(3个问题同时满足 才可能产生跨域问题)

浏览器限制

跨域(协议,主机名,端口号中有一个不同就产生跨域)

XHR(XMLHttpRequest)请求

浏览器会先执行还是先判断跨域?

        简单请求会先执行在判断,非简单请求先判断再执行


解决方法 :对浏览器限制修改不常用,主要解决跨域方式达到解决跨域问题

所以一般还是以XHR请求方式请求,主要解决跨域问题,两种方式

一--被调用方解决(在相应请头部增加字段,告诉浏览器支持跨域访问

        服务器端实现

                Filter解决方案,如下图:



                        

        NGINX配置

                实际工作中多以此方法解决ajax跨域问题,新建自己的nginx配置文件 在nginx.conf结尾添加如下语句


自己的配置文件中添加如下配置(红框中重点)


        APACHE配置

二--调用方解决(隐藏跨域)nginx 处理方式

    1.配置反向代理


2.ajax请求url填写虚拟主机反向代理服务器的名字



改变XHR请求方式的跨域解决方法(不推荐)

         JSONP---客户端ajax请求加上 dataType : "jsonp",


就不会是XHR请求,而是script请求,后台创建类继承AbstractJsonpResponseBodyAdvice,类上加上@ControllerAdvice注解  重写构造函数 如下


普通js请求返回类型是json而,jsonp返回的是js代码(函数调用形式:函数名是callback参数值,函数参数是原来要返回的值),jsonp约定的参数名是callback,也可以自定义,格式为: jsonp:'callback2',此时后台构造函数super里写callback2即可,这种方式也有一些弊端

        JSONP弊端

                服务器需要改动代码支持-(自己的项目还好,如果是调用别人的接口,别人没有设置jsonp访问形式的话就不行了)

                只支持GET方式请求(因为要返回js代码)

                请求不是XHR(没有异步刷新功能)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值