为何会发生 ajax跨越 nginx
1, 浏览器限制了ajax
由于 服务器 已经处理并响应了 请求。 可是浏览器禁止json
2, 跨域后端
域名或者端口不一致跨域
3, XHR (XMLHttpRequest) 请求浏览器
好比 将地址放入 <img src ="地址"> src 里面。服务器
就不是 xhr请求,浏览器不会爆跨越请求cookie
好比 json 类型的请求。不会产生跨域mvc
也就是以上 3种条件 都知足了 才可能产生 跨域问题app
解决思路
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跨域视频