【问题标题】:Why 'blocked by CORS policy' in React, but not with Node?为什么在 React 中“被 CORS 策略阻止”,而不是在 Node 中?
【发布时间】:2022-02-08 08:04:56
【问题描述】:

在 React 中运行完全相同的脚本会被 Cors 策略阻止,但当我使用 node 运行它时不会。

  1. 为什么可以用 node 做,但不能用 React?
  2. 我怎样才能在 React 应用程序中获取它?
  3. this chrome extension也允许,是不是因为脚本是在访问youtube时执行的,所以域是youtube?
async function isThisAllowed() {
    const videoURL = `https://www.youtube.com/watch?v=QnQe0xW_JY4`
    const data = await axios.get(videoURL);
    console.log(data);
}

【问题讨论】:

    标签: node.js reactjs cors


    【解决方案1】:

    CORS 是网站(在本例中为 YouTube)防止其他域访问它们的一种方式。基本上,在这种情况下,在其他域上运行的脚本将无法访问youtube.com

    CORS 仅由浏览器强制执行,因此您的 Node 脚本将按预期工作而您的 React 应用程序不会按预期工作是有道理的。

    Here's 很好地解释了 CORS 的工作原理。

    你可以用一个简单的节点代理来解决这个问题:

    import express from "express";
    import axios from "axios";
    
    const app = express();
    
    app.get("/proxy", async (req, res) => {
      const resp = await axios.get(req.query.url);
    
      res.send(resp.data);
    });
    
    app.listen(process.env.PORT || 3000);
    

    【讨论】:

    • 很好,不是从节点服务器上抓取数据然后将数据提供给客户端的反应部分的解决方案吗?你会运行服务器和客户端吗?有没有好的教程?我也google一下,谢谢
    • 是的!你可以组合一个简单的 Node 代理来让它工作;我已经用一个基本示例更新了我的答案。
    • 很好,我有工作了!我通过 react 来做到这一点,并将“代理”添加到 react 应用程序的 package.json 中,引用服务器的本地主机(express)。我从这篇文章中得到了代理:section.io/engineering-education/…
    猜你喜欢
    • 2020-07-03
    • 2021-12-17
    • 2020-05-28
    • 1970-01-01
    • 2020-09-11
    • 2021-04-16
    • 2018-02-26
    • 2019-11-19
    • 2020-09-12
    相关资源
    最近更新 更多