为什么会发生 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 预检命令给后台。
听过了才会再次发送请求
如果是 带cookie的跨域请求,那么必须是在同一个浏览器下的保存的cookie才可以带给后端的。
以上来自 慕课网 Ajax跨域视频