Angular js1中的403禁止Rest API(节点js)

Posted

技术标签:

【中文标题】Angular js1中的403禁止Rest API(节点js)【英文标题】:403 forbidden Rest API (node js) in Angular js1 【发布时间】:2018-03-11 06:32:54 【问题描述】:

我正在将在不同 localhost 上运行的 nodeJS REST API 调用到 Angular 应用程序中, 在邮递员中,我得到了预期的结果。但在角度应用程序中,由于 403 错误而下降,这是由于预检而发生的(预检响应具有无效的 HTTP 状态代码 403)。我尝试使用 $httpprovider 删除一些默认标头,还尝试在 access-control-allow-region 中使用正确的服务器名称而不是通配符(*),但没有任何效果。寻求帮助! 预检请求没有身份验证。 发布我的 req-respo snap

【问题讨论】:

XMLHttpRequest cannot load .... Response for preflight has invalid HTTP status code 401的可能重复 如果您尝试使用 Angular 解决它,没有任何帮助。它需要固定服务器端。这是CORS 问题。` 感谢@Ved,Vijayanath Viswanathan,sp00m @ved,在服务器端添加代码行后解决了它。 【参考方案1】:

通过在服务器端处理 OPTIONS 请求,我能够解决问题, This post solved my problem

通过添加以下代码行

app.use(function (req,res,next)
     if (req.method === 'OPTIONS') 
          console.log('!OPTIONS');
          var headers = ;
          // IE8 does not allow domains to be specified, just the *
          // headers["Access-Control-Allow-Origin"] = req.headers.origin;
          headers["Access-Control-Allow-Origin"] = "*";
          headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
          headers["Access-Control-Allow-Credentials"] = false;
          headers["Access-Control-Max-Age"] = '86400'; // 24 hours
          headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
          res.writeHead(200, headers);
          res.end();
     else 
    //...
    other requests
    
);

【讨论】:

以上是关于Angular js1中的403禁止Rest API(节点js)的主要内容,如果未能解决你的问题,请参考以下文章

启用 API 身份验证时,Apache 气流 REST API 调用失败并出现 403 禁止

Keycloak REST API 403 被禁止

KeyCloak用户rest api返回403禁止,为啥?

Grails Spring Security REST得到403禁止

如何诊断 Quarkus REST 服务 OIDC 错误(特别是 403 禁止)?

Ajax 发布 Django Rest Framework 出现 403 禁止错误