跨域的理解

当前端和后端的地址在同域下时,前端调用后端的接口不算跨域,不会出现跨域问题。同域要求地址和端口都一样。然后/后面的路径可以不一样。

为什么出现跨域问题。所谓的跨域问题就是当前端访问和自己不是同域的接口的时候报错的问题。

那么为什么会报错,是因为这种行为被浏览器禁止了,也就是和后端没有关系,是浏览器就根本不让你发出这样的请求。

那浏览器为什么不让你发出这样的请求呢?因为这样的请求不够安全。

比如我访问了某个银行网站登录了我的用户,然后我在这期间浏览器又访问了另外一个网站,而这个网站的后台向你刚才的银行网站发送了请求,因为你已经登录了我也可以在浏览器中带上你的cookie,这样我就可以轻松操作你的银行账户了。

这样设置后安全性是提高了,但是也阻止了很多正面的数据的共享,比如我想提供一个接口给很多不同域名的用户使用就会有问题。

这时候CORS出现了。CORS是一个W3C标准,全称是"跨域资源共享",它只是一种标准。

因为先前的浏览器的那套完全禁止跨域的标志不好用,所以现在的浏览器都遵循CORS的跨域标准。

遵循CROS的浏览器就不是完全不让跨域请求发出了,它允许跨域请求发出,只是会在跨域请求发出后给这个请求添加一些跨域的请求头信息(这个工作是浏览器自己帮我们做的,不需要我们手动添加),这些信息中包括了这个请求来自哪个源,这时还需要后台服务器配合设置,服务器需要在返回的响应头中添加自己支持的跨域地址是哪些,然后浏览器接收到服务器返回的数据后首先解析响应头中支持的跨域地址是否包含自己发出请求的地址,如果包含则成功接收数据,如果不包含则报错跨域不接收返回数据。

也就是说跨域都是浏览器自己的规则,如果我们是后端服务去访问接口则不会存在跨域问题。

所以就出现一种通过代理来解决跨域问题的方法,首先让浏览器访问本地的一个后台服务,让该后台服务去请求我们想要请求的接口返回数据(这里是后端请求不会跨域),然后再将请求到的数据返回给浏览器(这里相当与本地返回数据到浏览器属于同域),这样就成功解决了跨域的问题。

CROS默认是不会带上网站的cookie的,如果要携带需要前后端都进行设置。 

深入理解参考:http://www.ruanyifeng.com/blog/2016/04/cors.html

 

posted @ 2021-06-07 17:28  maycpou  阅读(102)  评论(0编辑  收藏  举报