nodejs解决跨域问题

本文探讨了浏览器安全机制导致的跨域问题,当协议、域名或端口不同时出现同源问题。在Node.js环境中,通过CORS(跨源资源共享)策略可以有效解决这个问题。介绍了一种方法,即在服务器端使用Node.js创建代理服务器,当AJAX发起请求时,首先访问代理服务器,代理服务器再利用CORS处理跨域请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨域:我们在开发中从一个服务器访问另一个服务器时,只要url中有以下其中一个不一样时就会发生跨域问题,这是浏览器的安全机制造成的,也被成为同源问题

  1. 协议不同
  2. 域名不同
  3. 端口号不同

如何解决这种问题呢,以下我们在nodejs中利用CORS来处理跨域问题

 

但我们用ajax去请求数据发生跨域时,用nodejs在后台写一个服务器代理

首先是ajax请求时先去访问我们服务器代理,而不是访问你的最终的目标地址

        $.post('服务器代理地址', {
          url:
            '目标地址',
        }).then(function(res) {
          console.log(res);//返回的数据
        });

然后在服务器代理中利用CORS解决跨域问题

//这个文件就是一个单独的专门用来做服务器代理解决跨域的,你只要运行这个文件将这个服务器打开就行了
//若遇到跨域访问获取数据时先访问这个服务器地址就行
const express = require("express");
const cors = require("cors");
const { get } = require("axios").default; //利用axois发送个网络请求
const app = express();
app.use(cors()); //就这一部就已经解决了跨域
//如果访问的是本地服务器,现在这步就相当于已经解决了跨域问题
//如果访问其他地址的服务器,那么此处就相当于一个服务器代理,解决跨域问题

app.use(express.json());
app.use(express.urlencoded());

//服务器的代理请求地址
app.post("/proxy", async(req, res) => {
    const result = await get(req.body.url); //这里相当于发了一个网络请求,这不存在跨域,就像你在浏览器中直接输入请求的地址一样
    res.json({
        code: 1,
        info: result.data,//axios请求的数据放在返回数据的data属性中
    });
});

app.listen(3003, () => {
    console.log("本地代理服务器运行在3003端口");
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值