爱收集资源网

挑战掘金日新计划,2月首日大爆发

网络整理 2023-10-01 09:07

开启鹈鹕成长之旅!这是我参与「掘金日新计划·2月更文挑战」的第1天,点击查看活动详情

诸位同学大家好,我是桃小瑞。在这给你们拜个晚年,祝诸位同学圣诞快乐。

序言

在后端的开发过程中,尤其是在浏览器环境下,跨域是个绕不开的话题,相信每位后端还会涉及到这个问题,记住的就直接手敲解决跨域问题,记不住的就只能问度娘了。

正式登场的是我们的二号人物,跨域。

跨域一、什么是跨域?

跨域是指在浏览器环境中存在的一种资源同源保护策略。当页面使用ajax/fetch进行网路恳求或则页面进行资源恳求时,网路合同、域名、端口不一致时才会触发浏览器的同源策略保护机制。

浏览器都会在控制台输出像下边图片中的内容。

#a:6:2:b:e:f:9:9:7:3:4:7:e:f:c:8:c:3:3:0:2:8:7:f:d:a:2:8:4:3:8:f#

二、解决跨域有什么途径呢?

见招招术,有限制就有对策。目前有好多可以解决跨域的问题,诸位看官请移步往下看

常见的解决跨域方法1、JSONP

借助script标签没有跨域的限制,因而实现跨域。

注:JSONP仅支持get恳求,而且须要前端的支持。

2、CORS(Cross-OriginResourceSharing)

借助CORS实现跨域,前端在恳求的响应恳求身上添加Access-Control-Allow-Origin属性,并设置指定的站点值,或则设置为*。

注:须要前后端同时支持。

3、nignx

nignx反向代理

4、websocket

借助websocket,实现浏览器与服务器的全双工通讯,同时容许跨域通信。

5、iframe

iframe搭配document.domain、location.hash、window.name三种方法实现跨域。

6、node作为中间件代理

启用一个本地的node服务器充当中间件,进行跨域处理。

工作中经常用形式

在工作中常见的跨域使用方法有nignx反向代理、CROS、node中间代理。

为何说node中间代理也是常用的方法呢?都没看到使用过呀。来来来,此时此刻就须要涉及到我们明天的主人公了。

三、跨域疑惑跨域的时侯,恳请是否是发出去了的呢?数据我们是否又收到了呢?

答案:

跨域的时侯,请求是早已发出去了,但是前端早已将数据返给我们了的,只是被浏览器绑架了,我们拿不到而已。

相信你看完下边的模拟对话才能懂了。

node中间代理

node中间代理它还有另外一个名子,叫Proxy代理跨域。主角闪耀登场。

简单使用

我们一上去回顾一下它的写法:

#2:2:e:2:d:9:3:b:2:c:4:3:0:7:f:6:4:1:f:1:2:d:2:3:a:9:1:d:d:4:c:b#

环境说明

我这儿使用的环境为:

其他的脚手架等原理都差不多。环境对我们来说都不是事,由于我们须要扒的是它的原理。

如今我们进入题外话。

复现

我们如今来启动我们的项目。

#7:0:8:8:e:a:f:7:d:a:3:8:6:9:6:e:c:3:1:d:f:9:d:3:9:4:3:5:d:b:6:9#

#a:4:2:a:5:7:a:7:4:7:0:4:c:5:b:1:2:c:4:e:2:5:0:5:8:8:c:b:3:2:8:a#

我们发觉,vite给我们启动了一个本地的node服务器,地址为::5173/。

#6:f:6:7:f:3:8:a:d:a:2:2:a:b:8:6:1:7:c:9:3:2:e:7:9:3:b:8:7:f:e:6#

之后如今我们来发个恳求试试。

我们先把vite.config.js中的代理关闭。

#2:8:e:4:7:1:5:1:7:7:c:d:0:2:4:b:3:8:6:d:d:8:8:3:f:0:2:6:c:5:e:e#

我们在onMounted中添加恳求。

#a:1:0:1:e:4:c:7:4:2:7:4:8:2:7:7:6:e:4:5:d:0:b:9:5:5:5:1:5:c:a:c#

此刻我们打开我们的控制台,惊喜来了。

#5:a:6:0:f:6:a:f:7:9:c:9:8:f:c:b:8:b:a:7:a:4:c:e:7:5:9:7:e:9:d:c#

开启代理

我们如今放开vite.config.js中的代理注释。

#f:0:2:7:5:9:6:f:8:a:5:7:7:4:b:2:9:0:f:7:9:a:d:e:0:8:2:3:8:6:1:6#

再来看看

#f:0:3:1:d:b:2:e:a:c:f:3:e:3:1:e:3:a:6:3:e:6:b:7:4:8:1:b:8:a:2:5#

#e:c:a:6:a:d:d:1:d:f:f:a:d:8:8:b:a:1:d:f:1:8:f:a:f:a:8:c:b:a:a:f#

原理解析

在vite启动的时侯,创建了一个开发服务器,之后按照我们进行的开发服务器配置进行node中间件代理。vite按照配置和我们恳求的api地址去恳求对应的api地址,我们如何把参数给它的,它就如何给目标地址;之后目标地址如何给vite的,vite就原模原貌的给我们。可能我说的有点绕,我们一起看一下下边的图。

右图为node开发服务代理恳求流程图。

#b:2:2:c:f:4:a:4:9:f:2:c:a:2:2:9:f:c:3:b:1:0:4:8:7:0:4:1:5:d:c:f#

为何node就可以解决跨域呢?

由于node不是运行在浏览器中的东西,所以没有跨域这些问题。

温情提醒

跨域,也就是同源策略只存在于浏览器环境。如:chrome、ie、浏览器、webview、使用了浏览器内核的环境。在app、小程序等平台中是没有这个的。

总结

以上就是后端Proxy代理跨域实现原理剖析的全部内容。希望本篇文章对你有所帮助。

如有不足或你有其他的看法欢迎留在评论区。

浏览器工作原理是怎样的
上一篇:小米MIX2手机一招搞定SIM卡联系人 下一篇:没有了