ajax 跨域

为何会发生 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跨域视频

相关文章
相关标签/搜索