共计 694 个字符,预计需要花费 2 分钟才能阅读完成。
如果你在前台调用后台服务接口的时候,如果这个接口不是同一个域的就会产生跨域问题。发生 ajax 跨域的原因?
1. 浏览器的限制 发生跨域问题的原因不是服务器不允许前台调用,而是浏览器限制了跨域请求。出于安全的考虑,当浏览器发现你的请求是跨域的请求时,它会做一些校验,如果校验不通过,它就会报错。2. 跨域 你所发出去的请求不是你本域的。我们的请求里面,协议,域名,端口任何一个不一样浏览器就会认为是跨域。3.XHR(XMLHttpRequest) 请求 只要不是发送 xhr 请求,浏览器一般都不会限制这个请求。
解决思路:
1. 针对浏览器限制导致的跨域
可以通过制定参数让浏览器不做校验浏览器就不会限制了。但是这个改动价值不大,因为你得需要每个人都要做这个改动,而且是客户端的改动。
2. 针对 XHR
既然发送 xhr 会被报错,那只要不是 xhr 请求即使是跨域浏览器也不会报错。基于这种思路,解决方案是 jsonp. 他的原理是通过动态的创建 script 标签,在 script 里面发送跨域请求。但是 jsonp 的解决方案有很多弊端,无法满足开发要求。
3. 针对跨域(两种思路)
1. 让被调用方去修改代码。比如说要从 A 域名调用 B 域名的时候,在 B 域名返回的信息里面加入一些字段,告诉浏览器我允许 A 域名调用,那么浏览器只要通过校验他就不会报跨域安全问题。这种是支持跨域的思路。
2. 当被调用方不是我们自己公司的,我们无法修改,就得采取第二种思路:调用方修改。这个思路是隐藏跨域。原理是通过一个代理,从浏览器里面发送的都是 A 域名的请求,在代理里面把指定的 url 转到 B 域名里面。这个转 发机制在浏览器认为就是同一个域名了,这样就不存在跨域的问题了。