为什么会发生 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 预检命令给后台。

听过了才会再次发送请求

ajax 跨域-LMLPHP

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

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

07-06 10:34