Nodejs中同一个域名下 post 为啥还给提示跨域而提交失败?

Nodejs中同一个域名下 post 为啥还给提示跨域而提交失败?

背景: NODE 做的后台 环境:在非 Chrome 下都能正常运行提交数据,只有 chrome 不行 警告语句: XMLHttpRequest cannot load http://XXX.com/login. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://www.XXX.com’ is therefore not allowed access.

请教一下这是怎么回事?


7 回复

为什么说 xxx.comwww.xxx.com 是同域名?


XXX.comwww.XXX.com 是不同的域
你 csp 限制了某些域名

soga~看漏眼了

但是为啥就只有 chrome 不行?其他浏览器都可以

找到原因了~感谢两位提醒

可以把原因 po 出来吗?

在Node.js中,如果遇到在同一个域名下的POST请求还提示跨域(CORS,Cross-Origin Resource Sharing)问题,通常可能是由以下几个原因导致的:

  1. 端口不同:即使域名相同,如果请求和响应的端口不同,也会被视为跨域请求。

  2. CORS中间件配置不正确:如果你使用了Express等框架,需要正确配置CORS中间件。

  3. 请求头设置问题:检查请求头中的OriginReferer等字段是否设置正确。

以下是一个使用Express框架和cors中间件正确配置CORS的示例:

const express = require('express');
const cors = require('cors');
const app = express();

// 允许所有来源的跨域请求(生产环境中应限制来源)
app.use(cors({
  origin: '*',
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  credentials: true,
}));

app.post('/your-endpoint', (req, res) => {
  res.json({ message: 'POST request received!' });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在上述代码中,cors中间件被配置为允许所有来源(origin: '*')的GET、POST等请求,并且允许携带凭证(credentials: true)。如果问题依然存在,请检查:

  • 浏览器控制台中的具体错误信息。
  • 确认请求的URL和端口是否与服务器监听的一致。
  • 检查是否有其他中间件(如安全、代理等)干扰了CORS的设置。
回到顶部