CORS 错误:它没有 HTTP 正常状态

问题描述 投票:0回答:2

我目前正在使用express.js构建后端服务器。 它工作得很好,直到我的项目的基于网络的版本遇到了这个问题:

Access to XMLHttpRequest at 'myurl.net/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

奇怪的是,我可以毫无问题地从用 Kotlin 编写的应用程序版本访问后端服务器并发出 POST、GET 请求。 我现在做错了什么?

在我用React.JS开发的前端服务器中,请求如下所示:(JavaScript)

axios.post("myurl.net/", {
  email: "[email protected]",
  password: "mypassword",
  newuser: "false"
}).then(function (res) {
  console.log(res)
}).catch(function (error) {
  console.log(error)
})

Express 服务器看起来像这样(我已将其简化为单个请求以使其更清晰):

require("dotenv").config();
const express = require("express");
const listen = require("./listen")
const bodyParser = require("body-parser");

const service = express();

service.use(bodyParser.urlencoded({ extended: false }));
service.use(bodyParser.json());
service.set("view engine", "ejs")

service.all('/*', function(req, res, next) {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Allow-Credentials", "false");
    res.setHeader("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
    next();
});

service.post("/", async (req, res) => {
    if(req.body.test == "hello_world") {
        res.json({
            server: "hello"
        })
    }
})

listen(service)

顺便说一下,本地后端服务器工作得很奇怪,在具有域和 HTTPS 的服务器上却不知何故不能。

javascript node.js express cors
2个回答
1
投票

密切注意错误消息:

对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态。

然后查找预检请求

这是一个 OPTIONS 请求,使用三个 HTTP 请求标头:Access-Control-Request-Method、Access-Control-Request-Headers 和 Origin 标头。

您没有

service.options("/"
的处理程序,因此需要 404 秒。

您需要回复 200 OK 状态。


我强烈建议使用

cors
中间件包它将为您处理这个问题。


0
投票

我正在为 IIS 中托管的应用程序使用 Angular 最新版本和 .net 8。
编写中间件和设置http选项状态代码不起作用。当我通过 Swagger 尝试时,它可以在本地运行。

有趣的是,我发现这可以通过设置规则通过 IIS Rewrite 来处理。

当我通过 IIS 托管网站浏览时,下面的答案可以解决问题并消除 Http 正常状态问题。 .NET Core 似乎解决了这个问题,但是,我无法找到解决此问题的任何其他解决方案。

https://stackoverflow.com/a/38309044/6786362

© www.soinside.com 2019 - 2024. All rights reserved.