产生跨域的“罪魁祸首”只有一个:那就是浏览器,具体说是浏览器的“同源策略”。
浏览器的同源策略用于隔离潜在恶意文件的重要安全机制。
跨域产生的原因是下面三点:
1. 浏览器的限制
2. 跨域
3. 请求是XHR(XMLHttpRequest)
对于第一个原因:很多人认为,发生跨域问题是服务器的行为:服务器不允许浏览器调用,其实不然,真正的原因是浏览器处于安全的考虑,当发现发出的请求是跨域请求时,就会做一些安全的校验,如果校验未通过,则就会报跨域安全问题。说白了,就是浏览器“多管闲事”,不是服务器不允许浏览器调用。
验证这种说法的方法是:
第一步:后端会有日志输出,说明后端正确收到请求了。
第二步:请求的状态码也是200表示请求成功,后端已经成功响应请求结果了,前端也成功获取了响应结果。
第三步:上面两部一切正常,但是浏览器控制台报错了,报告跨域安全问题。
对于第二个原因:请求不跨域,就会产生跨域的问题
对于第三个原因:也就是说如果发送的请求不是XHR请求,则就不会出现跨域安全问题,就算是跨域请求,浏览器也不会报错。
浏览器发送请求的途径有:
```
1. <img src="">
2. <script src="">
```
验证方法是:使用img标签或者script标签的src属性访问接口,然后看浏览器控制台是不会报跨域安全错误的。