当前端和后端的地址在同域下时,前端调用后端的接口不算跨域,不会出现跨域问题。同域要求地址和端口都一样。然后/后面的路径可以不一样。
为什么出现跨域问题。所谓的跨域问题就是当前端访问和自己不是用域的接口的时候报错的问题。
那么为什么会报错,是因为这种行为被浏览器禁止了,也就是和后端没有关系,是浏览器就根本不让你发出这样的请求。
那浏览器为什么不让你发出这样的请求呢?因为这样的请求不够安全。
比如我访问了某个银行网站登录了我的用户,然后我在这期间浏览器又访问了另外一个网站,而这个网站的后台向你刚才的银行网站发送了请求,因为你已经登录了我也可以在浏览器中带上你的cookie,这样我就可以轻松操作你的银行账户了。
这样设置后安全性是提高了,但是也阻止了很多正面的数据的共享,比如我想提供一个接口给很多不同域名的用户使用就会有问题。
这时候CORS出现了。CORS是一个W3C标准,全称是"跨域资源共享",它只是一种标准。
因为先前的浏览器的那套完全禁止跨域的标志不好用,所以现在的浏览器都遵循CORS的跨域标准。
遵循CROS的浏览器就不是完全不让跨域请求发出了,它允许跨域请求发出,只是会在跨域请求发出后给这个请求添加一些跨域的请求头信息(这个工作是浏览器自己帮我们做的,不需要我们手动添加),这些信息中包括了这个请求来自哪个源,这时还需要后台服务器配合设置,服务器会拿到这个请求解析里面的请求源信息,看这个请求源信息是否在我们允许的列表中,如果在则返回数据,否则告诉对方跨域。
CROS默认是不会带上网站的cookie的,如果要携带需要前后端都进行设置。
所以我的理解是CROS标准后多数跨域只需要后端进行配置允许就好了。
深入理解参考:http://www.ruanyifeng.com/blog/2016/04/cors.html
还有一种前端使用代理的方式来解决跨域的方法。
我们知道跨域是因为请求与前端不同域的接口时产生的,设置代理可以欺骗浏览器,我们告诉浏览器我要请求一个和我同域的后台接口,浏览器一看是同域的就直接放行了,可是放行后我却跑去请求了另外一个不同域的接口获取了数据。