前后端跨域联调

很多伙伴在学习前端或后端到一定时段时,就会思考前端后端两个东西之间的请求和数据到底是怎么联系起来的!

今天就来了解一下这个东西吧!

1.前端发送的请求,如何请求到后端服务的?

对于前端发出来的请求,跟后端的接口地址没有匹配到。

前端发出来的请求,并不是直接请求到后端服务器的,而是由nginx(反向代理)做了一个转发,把请求发送到后端服务器。


Nginx 反向代理 是一种常见的应用场景,它作为代理服务器,接收客户端请求,并将这些请求转发给后端服务器(如应用服务器)。反向代理与正向代理的区别在于,正向代理是客户端的代理,而反向代理是服务端的代理。 


工作原理:

  1. 客户端请求:用户通过浏览器等客户端向服务器发送请求(如访问一个网站)。
  2. Nginx 接受请求:Nginx 作为反向代理服务器,接收这些请求。Nginx 会处理请求并将其转发到后端应用服务器(例如,一个 Web 应用或者 API 服务)。
  3. 后端服务器处理请求:后端服务器处理请求后,将结果返回给 Nginx。
  4. Nginx 返回响应:Nginx 将后端服务器的响应返回给客户端。

前端请求为什么不直接请求到后端服务器?

  • 负载均衡:Nginx 可以将客户端请求分发到多台后端服务器,实现负载均衡,避免某一台服务器压力过大。
  • 安全性:反向代理可以隐藏后端服务器的具体信息,增强系统的安全性。
  • 缓存:Nginx 可以缓存静态文件(如图片、CSS、JS)和动态内容的响应,减少后端服务器的负载,提高访问速度。
  • SSL/TLS 终止:可以让 Nginx 处理 SSL 加密与解密(SSL 终止),减少后端服务器的压力。

下面来举个例子:

server{
        listen 80;
        server_name localhost;
        
        localhost/api/{
                proxy_pass    http://localhost:8080/admin/; #反向代理
        }
}

前端:http://localhost/api/employee/login

后端:http://localhost:8080/admin/employee/login

我们可以看到前端请求的地址中:/api/ 恰好与上面代码中的/api/匹配,这时就会将前端发送过来的请求转发到后端(通过proxy_pass指令,将前端发送的请求,转发到后端的接口地址)。

简单的讲,拿上面的例子,就是将/api/替换为proxy_pass后的地址(红色部分),而/api/后面的动态地址,则直接拼接到替换后的地址后面即可,这样就得到了新的请求地址,也就成功将请求的地址转发到后端服务器。

 

### 使用 Nginx 配置解决前后端联调中的 CORS 问题 为了有效处理前端 Vue后端 Python 应用之间的请求,可以利用 Nginx 进行反向代理配置。这不仅解决了资源共享 (CORS) 的限制,还提高了系统的灵活性和安全性。 #### 1. 安装并启动 Nginx 确保已安装 Nginx 并正常运行。可以通过命令 `sudo systemctl start nginx` 启动服务[^1]。 #### 2. 修改 Nginx 配置文件 编辑默认站点配置文件 `/etc/nginx/sites-available/default` 或创建新的虚拟主机配置: ```nginx server { listen 80; server_name your_domain_or_ip; location /api/ { proxy_pass http://backend_server_address/; add_header Access-Control-Allow-Origin *; # 允许所有来源访问, 生产环境建议指定具体名 add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } } location / { root /path/to/vue/dist; try_files $uri $uri/ /index.html; } } ``` 这段配置实现了两个主要功能: - 对于以 `/api/` 开始的路径,将其转发给实际的后端服务器地址; - 设置必要的 HTTP 响应头来允许来自特定源的请求[^2]。 #### 3. 测试配置有效性 保存更改后的配置文件,并执行以下命令测试语法正确性和重新加载 Nginx: ```bash sudo nginx -t sudo systemctl reload nginx ``` 此时,在前端应用中发送至 `/api/*` 的任何 AJAX 请求都将被 Nginx 正确路由到对应的后端 API 接口,而不会触发浏览器的安全策略阻止[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

تچ快乐杂货店يچ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值