什么是跨域以及如何解决?通俗易懂带你彻底搞定

2022-12-11 程序员资讯 0 424
¥ 2.88B

包年VIP免费升级包年VIP

开通VIP尊享优惠特权
立即下载 升级会员

那时的web工程项目,许多都是其间端分立,不光难再次出现布吕马难题

所以甚么是布吕马难题呢?第一集该文带你全盘从其本质上弄知道甚么是布吕马难题和怎样化解

一 布吕马有甚么现像?

他们先看呵呵现像,怎样再次出现布吕马难题,如下表所示试验

后端:应用程序已经开始出访两个网页:https://www.helloworld.net/special , 此网页中推送了两个后端两个 http USB后端:出访的后端USB为: https://tiger-api.helloworld.net/v1/special/getSpecialList
什么是跨域以及如何解决?通俗易懂带你彻底搞定

下面的提示信息:has been blocked by CORS policy: Response to preflight request does not pass access control check

译者回来是:已被CORS思路制止:对允诺的积极响应未透过出访控制检查和

这是没实用性有关的布吕马模块,是无法出访这个USB的

二 甚么是布吕马难题?

比方说,是:应用程序出访两个 网页时,比如说出访 https://www.helloworld.net/special

此时的 协议主机端口,分别是 https , www.helloworld.net , 80

所以那个网页中,发的USB允诺,那个USB的协议主机,端口 必须和当前的网页的一样,三个都一样才行,才可以出访

否则就会再次出现下面的布吕马现像

比如说应用程序打开网页 https://www.helloworld.net/special

在此网页中,可以允诺USB https://www.helloworld.net/getSpecialList

因为他们的协议,主机,端口,都是相同的,是可以允诺成功的。

总结一句话:在应用程序中,只有 协议,主机,端口三者都相同时,才可以互相出访,否则,不可以出访

注意:是在应用程序中

三 布吕马难题是怎么造成的?

那个难题就涉及到了应用程序同源思路

这是应用程序同源思路,透过下面的例子可以知道

所谓的同源思路,其实是 协议主机, 端口都相同的,才可以互相出访

否则只要有两个不同,是无法出访的。

注:布吕马难题,只是再次出那时应用程序中,因为应用程序有同源思路,所以才会有布吕马难题

之前我也一直以为,布吕马难题是由于应用程序的同源思路产生的,所以是不是只需要在允诺前,加点实用性就能化解了

为甚么都是后端在积极响应头里面加点实用性才化解的?为甚么是后端?布吕马难题是应用程序造成的,这和后端有甚么关系?

从下面,他们知道两个事实:他们出访的url,如果不是同源的,也是协议 ,主机,端口,有两个不一样,是无法允诺通的

所以难题来了:

为甚么允诺不通?既然允诺不通,到底是作用在http的哪个阶段导致的允诺不通?是应用程序拦截了允诺,没让允诺发出去,导致的不通?还是应用程序拦截了积极响应,导致的不通?

答案是:允诺是能正常的发出去的,后端也正常的积极响应了,应用程序是把积极响应给拦截了,所以会再次出现开头的

has been blocked by CORS policy: Response to preflight request does not pass access control check

用一张图说明,就很难知道了,如下表所示图:

什么是跨域以及如何解决?通俗易懂带你彻底搞定

四 怎样化解布吕马难题

透过下面的图他们知道了,应用程序是拦截了积极响应(和第一阶段的允诺是没关系的),导致整个http允诺没走通

所以,怎样化解,让USB能正常的发出去,正常的收到积极响应数据呢?

很难就想到,怎样在积极响应头中添加一些特殊的字段,应用程序一看到有这些字段,就不拦截了,所以布吕马难题不就化解了吗

事实上正是这样的,这也是之前好奇,化解布吕马难题,为甚么是后端加一些实用性,其实是在积极响应头中添加了一些特殊的积极响应头

所以这些特殊的积极响应头是甚么呢?

他们先看看 www.helloworld.net 是怎么化解的,添加了哪些积极响应头字段

什么是跨域以及如何解决?通俗易懂带你彻底搞定

是的,只要后端在积极响应的时候,在积极响应头中添加以下字段,就可以化解布吕马难题

access-control-allow-origin : 该字段是必须的。它的值要么是允诺时Origin字段的值,要么是两个*,表示接受任意域名的允诺。access-control-allow-credentials : 该字段可选。它的值是两个布尔值,表示是否允许推送Cookie。默认情况下,Cookie不包括在CORS允诺之中。设为true,即表示服务器明确许可,Cookie可以包含在允诺中,一起发给服务器。那个值也只能设为true,如果服务器不要应用程序推送Cookie,删除该字段即可Access-Control-Allow-Methods: 该字段必需,它的值是逗号分隔的两个字符串,表明服务器支持的所有布吕马允诺的方法。注意,返回的是所有支持的方法,而不单是应用程序允诺的那个方法。这是为了避免多次”预检”允诺。

其实最重要的是 access-control-allow-origin字段,添加两个 * ,允许所有的域都能出访

当然,化解布吕马还有其它方法,本文只讲最常用的,其它的方法可以自己搜呵呵

五 总结:

透过以上的讲解,那时总结如下表所示

同源思路:协议,主机,端口 三者都相同,是同两个源,只要有两个不同,是不同的源,只有同两个源的资源才能互相出访布吕马难题是应用程序的同源思路造成的布吕马难题的其本质 ,是应用程序拦截了积极响应,所以后端只需要在积极响应头中添加相应的字段,就可以化解布吕马难题

还有记住下面这张图

什么是跨域以及如何解决?通俗易懂带你彻底搞定

资源下载此资源下载价格为2.88B,包年VIP免费,请先
2405474279

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务