node express跨域设置

在使用Express框架时遇到跨域问题,虽然设置了Access-Control-Allow-Origin,但POST请求仍被拦截。问题可能是由于'Access-Control-Allow-Origin'设置为'*'引起的,且当使用'Access-Control-Allow-Credentials': true时,不能使用通配符。解决方案是将允许跨域的代码置于所有路由之前,并确保正确设置各种响应头,包括针对Credentials的处理。同时,OPTIONS预检请求需返回200状态码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题
在express框架下,已经加了跨域的请求头设置,但是,发现,option请求能通过,post请求因为跨域问题被拦截。查看post请求头部,确实缺失了Access-Control-Allow-Origin头部信息。

其他可能的影响因素
(以下情况,来自其他网友博客说法,暂时精力有限,均未验证是否对错):

  1. “Access-Control-Allow-Origin”: *
    有说法称该头部不能设置为 *
  2. “Access-Control-Allow-Credentials”: true
    前端也设置了 xhr.withCredentials = true;
    “ 如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。”
    https://blog.csdn.net/java_green_hand0909/article/details/78740765
  3. ‘Content-Type’: ‘application/json;charset=utf-8’
    某某某情况下Content-Type不支持设置

最终解决方案:
express允许跨域的代码必须放在路由前面。


// 允许跨域
app.all('*', function(req, res, next) {
  console.log(req.headers.origin)
  console.log(req.environ)
  res.header("Access-Control-Allow-Origin", req.headers.origin);
  // res.header("Access-Control-Allow-Origin", '*');
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("Access-Control-Allow-Credentials","true");
  res.header("X-Powered-By",' 3.2.1')
  if(req.method === "OPTIONS") res.send(200);/*让options请求快速返回*/
  else  next();
});
 
 
app.use('/router1', router1);

需要将允许跨域的请求代码放在所有的路由前面,因为请求被express接受到的时候,拦截的顺序是根据自己写的代码路由顺序决定的,一旦满足拦截条件,如果不执行next()方法,则就不会继续把请求发送给下一个路由拦截器。
https://blog.csdn.net/hbiao68/article/details/84883537

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值