前端开发服务器中的 Proxy 代理跨域实现原理解读

这篇具有很好参考价值的文章主要介绍了前端开发服务器中的 Proxy 代理跨域实现原理解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端服务器代理请求,JavaScript,前端,node.js

各位朋友你们好,我是桃小瑞,微信公众 @ 桃小瑞。在这给大家拜个晚年,祝各位朋友新年快乐。

前言

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

即将登场的是我们的二号人物,跨域。👇👇👇

跨域

一、什么是跨域?

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

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

前端服务器代理请求,JavaScript,前端,node.js

二、解决跨域有哪些途径呢?

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

常见的解决跨域方式

1、 JSONP

利用script标签没有跨域的限制,从而实现跨域。

注:JSONP仅支持get请求,并且需要后端的支持。

2、 CROS( Cross-Origin Resource Sharing )

利用 CROS实现跨域,后端在请求的响应请求头上添加Access-Control-Allow-Origin属性,并设置指定的站点值,或者设置为*

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

3、 nignx

nignx 反向代理

4、websocket

利用websocket,实现浏览器与服务器的全双工通信,同时允许跨域通讯。

5、iframe

iframe 搭配 document.domainlocation.hashwindow.name三种方式实现跨域。

6、node作为中间件代理

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

工作中常常用方式

在工作中常见的跨域使用方式有nignx 反向代理CROSnode 中间代理

为什么说node 中间代理也是常用的方式呢?都没看见使用过呀。来来来,此时此刻就需要涉及到我们今天的主人公了。

三、跨域疑问

跨域的时候,请求是否是发出去了的呢?数据我们是否又收到了呢?

答案:

跨域的时候,请求是已经发出去了,而且后端已经将数据返给我们了的,只是被浏览器劫持了,我们拿不到而已。

相信你看完下面的模拟对话就能懂了。

  • 前端:发送请求给后端。
  • 后端:收到请求,数据返给你了。
  • 浏览器:你后端这所在地(指:协议、域名、端口)和我所在地不对呀,肯定不可信,拦截掉,为了不让前端云里雾里的,我给它报个异常吧。
  • 我们的数据就这样被浏览器所拦截,不给我们了。

node 中间代理

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

简单使用

我们一起来回顾一下它的写法:

server: {
    proxy: {
      '/api': {
        target: 'http://locahost:3000', // 目标地址
        changeOrigin: true, // 是否换源, true 换源
        rewrite: (path) => path.replace(/^\/api/, ''), // 替换
      }
    }
  }

环境说明

我这里使用的环境为:

  • vue
  • vite

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

现在我们步入正题。

复现

我们现在来启动我们的项目。

pnpm run dev

前端服务器代理请求,JavaScript,前端,node.js

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

前端服务器代理请求,JavaScript,前端,node.js

然后现在我们来发个请求试试。

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

前端服务器代理请求,JavaScript,前端,node.js

我们在onMounted中添加请求。

fetch('http://127.0.0.1:5888/api', {
    method: 'get'
})

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

前端服务器代理请求,JavaScript,前端,node.js

开启代理

我们现在放开vite.config.js中的代理注释。

前端服务器代理请求,JavaScript,前端,node.js

再来看看

前端服务器代理请求,JavaScript,前端,node.js

前端服务器代理请求,JavaScript,前端,node.js

原理解析

在 vite 启动的时候,创建了一个开发服务器,然后根据我们进行的开发服务器配置进行 node 中间件代理。vite 根据配置和我们请求的 api 地址去请求对应的 api地址,我们怎么把参数给它的,它就怎么给目标地址;然后目标地址怎么给 vite 的,vite 就原模原样的给我们。可能我说的有点绕,我们一起看一下下面的图。

下图为 node 开发服务 代理请求流程图。

前端服务器代理请求,JavaScript,前端,node.js

为什么 node 就可以解决跨域呢?

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

温馨提醒

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

总结

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

如有不足或你有其他的见解欢迎留在评论区。文章来源地址https://www.toymoban.com/news/detail-793444.html

到了这里,关于前端开发服务器中的 Proxy 代理跨域实现原理解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实现跨域代理服务器

    准备环境 python3.7+ 依赖:aiohttp 代码实现(代理服务器,返回响应体和进行跨域处理后的headers) 测试 写个get的方法 下载测试 结果 可以正常下载 并且在响应头中能看到Server:is my server 同时可以看到添加成功的Allow-Origin响应头

    2024年02月16日
    浏览(10)
  • Vite 配置代理 Proxy,Vue配置代理,解决前端跨域

    我们在做项目的时候经常会遇到跨域的问题,之所以会出现跨域问题是因为浏览器的同源策略,即协议、域名、端口需要一致,才可以访问服务端的资源。当一个请求地址(服务端的地址)的协议、域名、端口三者之间任意一个与当前页面地址(前端页面地址)不同即为跨域

    2024年02月17日
    浏览(20)
  • Vue中利用代理服务器解决跨域问题

    目录 第一章、了解跨域 第二章、解决跨域问题——代理服务器 2.1 了解原理 2.2 如何配置代理服务器 2.2.1 配置代理服务器(方法一) 2.2.2 配置代理服务器(方法二) AJAX及其相关知识应用(很详细)_❆VE❆的博客-CSDN博客 前端的8080端口需要向后端服务器3000端口请求数据,此

    2024年02月03日
    浏览(19)
  • .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求

    关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法 NuGet直接获取Titanium.Web.Proxy 配置 与其说是配置,不如就说这一部分就是未来你需要使用的部分,想知道具体每个部分是干什么的就去看原文链接 全放过来太占地方 最后的 Console.Read(); 是一个等待函数,你

    2024年02月09日
    浏览(25)
  • umi 如何使用 proxy 代理解决 开发环境跨域 问题

    由于浏览器的同源策略限制,当一个请求 URL 的协议、域名、端口和当前页面 URL 任意一个不一致时都会出现跨域错误。 eg: 用 node run了一个 http://localhost:8080 的服务,在这个服务器下访问的网页也默认在 http://localhost:8080 这个域下面; 假设服务端所在的域是 http://example.com 这

    2024年02月09日
    浏览(15)
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(16)
  • Vue 3中的反向代理 和如何在服务器配置反向代理

    如何在Vue 3项目中配置反向代理,让前端开发变得爽到爆!还有个小插曲,Vite为我们提供了更简单的方式,就像找对象一样直接。 首先,我们来谈谈反向代理是什么。简单来说,反向代理就像是前端和后端之间的婚姻介绍所。前端需要向后端请求数据,但由于某些原因(比如

    2024年04月13日
    浏览(8)
  • 本地开发环境请求服务器接口跨域的问题(vue的问题)

    上面的这个报错大家都不会陌生,报错是说没有访问权限(跨域问题)。本地开发项目请求服务器接口的时候,因为客户端的同源策略,导致了跨域的问题。下面先演示一个没有配置允许本地跨域的的情况: 可以看到,此时我们点击获取数据,浏览器提示我们跨域了。所以我

    2024年01月23日
    浏览(16)
  • 用Java开发HTTP代理服务器

    HTTP代理服务器是一种网络应用,它充当位于客户端和目标服务器之间的中间节点,将客户端发出的HTTP请求转发给目标服务器,并将目标服务器返回的HTTP响应内容回传给客户端。通过使用代理服务器,客户端可以避免直接访问目标服务器,从而更加安全地访问互联网资源。

    2024年02月16日
    浏览(18)
  • 使用Nginx作为反向代理服务器在Linux中的最佳实践

    在Linux环境下,Nginx因其高效性能、稳定性以及丰富的功能集而广泛用于作为反向代理服务器。以下是在Linux中使用Nginx作为反向代理服务器的最佳实践: 1. 安装与配置 首先,确保你的Linux发行版已经安装了Nginx。大多数Linux发行版都提供了Nginx的包管理工具。例如,在基于Deb

    2024年01月17日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包