不允许 CORS 原始请求 React Express

Posted

技术标签:

【中文标题】不允许 CORS 原始请求 React Express【英文标题】:CORS Origin Request not allowed React Express 【发布时间】:2020-05-25 13:31:21 【问题描述】:

我正在使用 react & express 作为一个简单的表单 当我将我的反应表单发布到快递服务器时,我得到了这个

Access to XMLHttpRequest at 'http://localhost:4000/api/user' from origin 'http://localhost:9000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这就是我在我的 express server.js 中尝试过的

const cors = require("cors");

app.use(
  cors(
    origin: "*",
    credentials: true
  )
);

在我的中间人

app.use((req, res, next) => 
  res.header("Access-Control-Allow-Origin", "localhost:9000");
  res.header("Access-Control-Allow-Credentials", true);
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
);

我尝试通过 axios 发布请求:

axios
 .post("http://localhost:4000/api/user", data)
 .then(() => console.log("Tadaaa"))
 .catch(err => 
   console.error(err);
);

【问题讨论】:

credential: true 是必需的吗? 不知道,推荐的教程太多了 【参考方案1】:

通过在路由前传递app.use(cors()); 修复了错误

【讨论】:

【参考方案2】:

具有credentials: true 的CORS 请求将不适用于origin: "*"。如果您希望包含凭据,则需要指定您的来源,这也不适用于 localhost。因此,除非您的应用程序是在线托管的,否则我建议不要包含凭据。

有关 CORS 及其工作原理的更多信息,请参阅 here。

【讨论】:

我试过这个:app.use(cors( origin: "*" )); 仍然有同样的错误:( 你可以试试这个:` res.header('Access-Control-Allow-Origin', 'localhost:[your port]'); res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');` 在使用 localhost 时,我在某些浏览器(尤其是 Chrome)中遇到了问题。但你可以试一试。对不起格式,似乎无法在 cmets 中制作代码块。 仍未修复 :(( 奇怪,错误还是一样吗? app.use(function(req, res, next) res.header('Access-Control-Allow-Origin', 'localhost:3000'); res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); 尝试使用这个中间件函数而不是 app.use(cors),这是我为我的项目设置的功能,使其与本地主机服务器和客户端一起工作。 还是一样 =(((【参考方案3】:

api 用户端点是否存在?否则,请尝试在没有额外选项的情况下传递 cors 中间件。

【讨论】:

是的,我做了``app.use(cors()); `` 上面有错误 + `` 错误:网络错误 `` 终点存在吧?并且服务器也在运行?如果端点不存在,有时您会收到该错误 是的,服务器在 4000 端口上运行,并在 9000 上做出反应,所有 get 请求都可以正常工作 您可能需要发布更多代码,因为我不确定您为什么会从我看到的代码中得到该错误。

以上是关于不允许 CORS 原始请求 React Express的主要内容,如果未能解决你的问题,请参考以下文章

Django CORS 请求外部重定向不允许

android 应用程序中的 CORS 原始请求被阻止

Express cors 不允许凭据

Express cors 不允许凭据

React Cors 政策问题没有“访问控制允许来源”

CORS 标头“Access-Control-Allow-Origin”缺少 REACT