当我的网站调用 REST api(代码如下)时,只有 OPTIONS
请求通过,POST
或 GET
请求不会遵循。 OPTIONS
请求成功通过 CORS 白名单。 POST
或 GET
请求不会被记录,也不会被白名单阻止。奇怪的是,谷歌 Recaptcha 请求有效,所有第三个网站都有效,除了我的。 API 与网站在同一域上运行,只是另一个端口。
我的网站正在使用 Cloudflare,Cloudflare 会不断更改传入请求的 IP 地址。我的网站通过cloudflare代理后他的ip地址是ipv6。该网站的 ip 被列为白名单数组中的 ipv6 地址。
const whitelist = ["*all the ip addresses"];
var corsOptions = {
origin: (origin, callback) => {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback('Not allowed by CORS');
}
}
};
const app = express();
mongoose.connect(*mongodb credentials*);
app.use((req, res, next) => {
req.headers.origin = req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for'] || req.connection.remoteAddress;
next();
});
app.use(morgan('combined'));
app.use(cors(corsOptions));
app.use(bodyParser.json({type: '*/*', limit: '2mb'}));
app.use(bodyParser.urlencoded({limit: '2mb', extended: true}));
app.use(*routing*);
module.exports = app;
最佳答案
app.use 仅用于注册中间件。 您需要为您使用的每种方法指定一个路由。 app.get、app.put、app.delete 等 您还可以对所有方法使用 app.all 您可以在这里找到更多信息:https://expressjs.com/en/guide/routing.html
关于node.js - NodeJS - 仅 OPTIONS 请求发送到 REST API,POST 或 GET 不会遵循 (Cloudflare),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52034699/