我目前正在使用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 的服务器上却不知何故不能。
我正在为 IIS 中托管的应用程序使用 Angular 最新版本和 .net 8。
编写中间件和设置http选项状态代码不起作用。当我通过 Swagger 尝试时,它可以在本地运行。
有趣的是,我发现这可以通过设置规则通过 IIS Rewrite 来处理。
当我通过 IIS 托管网站浏览时,下面的答案可以解决问题并消除 Http 正常状态问题。 .NET Core 似乎解决了这个问题,但是,我无法找到解决此问题的任何其他解决方案。