ajax 跨域

为什么会发生 ajax跨越 

 

1, 浏览器限制了

因为 服务器 已经处理并响应了 请求。 但是浏览器禁止

2,  跨域

域名或者端口不一致

3, XHR (XMLHttpRequest) 请求

比如  将地址放入 <img src ="地址"> src 里面。

就不是 xhr请求,浏览器不会爆跨越请求

比如 json 类型的请求。不会产生跨域

 

也就是以上 3种条件 都满足了 才可能产生 跨域问题

 

解决思路

1,浏览器改动不让它禁止跨域意义不大。不可能每个客户端都改。

2, 将XHR请求 换成 JSONP (不通用)

3, 跨域: 被调用方 允许跨域(zhi'shi浏览器可以跨域), 调用方 隐式跨域(比如通过代理改成同一域名)

 

jsonp

jsonp 是什么?

jsonp 是对json 方式的补充, 使用 动态创建script标签 ,  连接方式 为 script   来解决跨域。

接收内容会解析为js代码, content-type : application/script

使用jsonp 后台是需要改动代码的

 

jsonp的 弊端

1, 服务器需要改动代码支持

2, 只支持 get 请求

3. 发送的不是XHR请求,没有XHR的特性和功能

 

解决

 

被调用方解决

即可修改的是被调用方的 http服务器

1,  服务器端实现, nginx 配置

浏览器是先执行后判断

后端代码,可以使用 filter 设置允许跨域。 

如果是spirngmvc 加上 @CrossOrigin 即可

 

调用方解决: 修改的是 调用方的 http服务器。

也就是 看起来 域名还是 同一个域名,但是 最终都会去访问到 跨域的域名

在调用方的后台使用nginx 代理到其他域

 

 

简单请求, 非简单请求

简单请求,浏览器会先发送请求后判断,非简单请求就先校验,发送 options 预检命令给后台。

听过了才会再次发送请求

8cde5e2ab80bbaf76ee5789d013c8533888.jpg

 

 

如果是 带cookie的跨域请求,那么必须是在同一个浏览器下的保存的cookie才可以带给后端的。

 

以上来自 慕课网 Ajax跨域视频

 

 

转载于:https://my.oschina.net/ouminzy/blog/3070382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值