前端开发中如何解决跨域问题

在前端开发中,经常会遇到 跨域 问题,这会导致网络请求失败,特别是在前后端分离的项目中。本文中,我们将探讨 跨域 是什么以及如何解决 跨域 问题。跨域 全称为 跨域资源共享(CORS),它是浏览器的一种安全机制,仅允许网页请求同一域名下的服务。

前端开发中如何解决跨域问题

所谓同一域名,要求协议、域名和端口全部一致。任何一项不一致,就会构成 跨域 请求。

前端开发中如何解决跨域问题

1. 跨域问题的原因

在前后端分离的项目中,解决 跨域 的方法主要有三种:配置后端、配置前端和配置生产环境服务器。传统的代理方式,如 JSONP,由于不适用于 ReactVue 这类现代开发环境,并且存在安全隐患,因此我们在此不作详细介绍。

前端开发中如何解决跨域问题

2. 配置后端解决 跨域

首先,浏览器是否启用 跨域 保护机制是根据后端的响应决定的。配置后端是最直接有效的方法,因为浏览器依据的是响应头中的 Access-Control-Allow-Origin。如果该字段的值为星号(*),则表示允许所有来源的请求;如果是一个具体的域名,则浏览器将不对该域名下的请求进行 跨域 保护。

3. 使用中间件配置 跨域

后端程序的语言和库不同,配置 Access-Control-Allow-Origin 的方法也会有所不同。如果使用的是 Node.jsExpress,可以添加 cors 中间件。cors 默认允许所有 跨域 请求。若要限制特定域名,可以为 origin 配置项传递一个字符串或数组,用以指定允许 跨域 的域名。

前端开发中如何解决跨域问题

4. 配置前端开发环境

第二种方法是在前端开发环境中配置代理。由于 跨域 是浏览器的安全机制,如果绕过浏览器直接发送请求,就不会受到 跨域 保护机制的影响。因此,我们可以使用一个中转服务器来发送请求和接收响应,前端只需请求这个中转服务器,并保持与其 URL 一致即可。

前端开发中如何解决跨域问题

5. 使用前端脚手架配置代理

大多数前端脚手架都支持代理配置,例如 vitecreate-react-app 等。以 vite 为例,其自带的开发服务器支持设置代理。在 vite 的配置文件(config.js)中,我们可以添加代理配置,将对 /api 路径的请求代理转发到真实的后端服务路径,并根据需要对转发的 URL 进行重写。

前端开发中如何解决跨域问题

6. 手动创建中转服务器

第三种方法适用于生产环境或开发服务器不支持代理的情况。我们可以手动创建一个中转服务器来代理请求。例如,将打包好的前端项目放置在 dist 目录下,入口文件为 index.html。使用 Express 创建服务器,负责发送前端页面并代理请求。

7. 配置代理服务器示例

我们可以将所有请求响应都返回到 dist 目录下的 index.html 文件,但对于 /api 路径,我们仍需配置代理。这时需要安装 http-proxy-middleware 依赖库,它与 webpack 底层使用的代理服务器相同,配置也几乎一致。不同之处在于 webpack 中的 rewrite 规则,在这里称为 pathRewrite

8. 启动服务器展现前端页面

启动此服务器后,它将负责展示前端生产环境的页面。可以看到,即便移除后端的 跨域 支持,前端依然能够成功请求后端数据。除了 Express,还可以使用 Nginx 等专业服务器程序进行配置。具体配置方法可以参考相关文档。

原文链接:https://juejin.cn/post/7352079441525063691 作者:垂慕容

(0)
上一篇 2024年3月31日 上午10:05
下一篇 2024年3月31日 上午10:16

相关推荐

发表回复

登录后才能评论