【问题标题】:Angular - JSON Put and Delete Returns 403 (But postman app works well)Angular - JSON Put 和 Delete 返回 403(但邮递员应用程序运行良好)
【发布时间】:2019-06-07 15:35:48
【问题描述】:

我有一个休息 api,我可以使用它发布和获取请求。但是当我想使用 put 和 delete 请求时,它返回错误 403。而且当我尝试使用 Postman 应用程序(用于 json 请求的应用程序)进行放置和删除时,一切正常。我真的很困惑。让我用一些截图来证明这个问题。 (出于安全考虑,我对链接进行了审查,对此深表歉意)


Chrome 控制台; 邮递员应用程序;


任何我的放置代码;

  /** PUT: update the firm on the server */
updateFirm (firm: Firm): Observable<any> {
 console.log(firm);

 return this.http.put(this.firmUrl+"put/"+String(firm.id), firm, httpOptions).pipe(
   tap(_ => console.log(`updated firm id=${firm.id}`)),
   catchError(this.handleError<any>('updateFirm'))
 );
}

如果您能帮助我,我将不胜感激。祝你有美好的一天

【问题讨论】:

  • 你的后端使用什么语言?

标签: json angular typescript


【解决方案1】:

代理解决您的问题。 一个不错且快速的解决方案可能是借一个(如https://cors-anywhere.herokuapp.com)来测试然后自己做。 这是一个例子:

import { Component, OnInit } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
  selector: 'app-analyzer',
  templateUrl: './analyzer.component.html',
  styleUrls: ['./analyzer.component.scss']
})
export class AnalyzerComponent implements OnInit {

  res;

  constructor(private http: HttpClient) {
    this.getDeck().subscribe(res => {console.log(res); this.res = res; });
  }

  ngOnInit() {
  }

  getDeck() {
    const headers = new HttpHeaders({
      'X-Requested-With': 'XMLHttpRequest'
    });
    return this.http.get('https://cors-anywhere.herokuapp.com/https://www.keyforgegame.com/api/decks/30763530-041c-4e15-b506-3456e79141d2/',
      {headers: headers}
      );
  }

}

【讨论】:

    【解决方案2】:

    您的问题是关于 HTTP OPTIONS 请求的 CORS

    确实,在执行HTTP PUT 请求之前,您的客户端必须发出OPTIONS 请求,以便添加包含您的标头的httpOptions 变量。

    所以你必须在你的服务器的代码中授权OPTIONS请求的执行。

    【讨论】:

      【解决方案3】:

      我遇到了类似的情况,发现 Angular 2 在 POST 完成之前执行了一个 OPTIONS 方法! “Access-Control-Allow-Methods”中缺少 OPTIONS。

      如果我检查您的日志,那么我认为您也应该允许 OPTIONS: 使用 angular 和 perl 作为后端,我必须允许以下内容:

      -"Access-Control-Allow-Methods" => 'GET,POST,PATCH,DELETE,PUT,OPTIONS',

      【讨论】:

        【解决方案4】:

        它看起来像一个 CORS 错误,您正在从本地计算机上的本地计算机向不同 URL 上的后端发出 http 请求。解决这个问题的唯一方法是在后端允许来自不同来源的请求。或者可能在本地机器上运行后端。

        【讨论】:

        • 但我可以从邮递员应用程序中放置和删除。它也在不同的机器上与服务器。
        • 邮递员会做它自己的魔法。检查这个stackoverflow.com/questions/36250615/cors-with-postman
        • 我已经要求我的经理检查是否为放置和删除激活了 cors。我现在在等他的回复。感谢您的关注。如果 cors 是问题,我会接受这个答案。
        • 感谢 Cem,您是否设法找出 CORS 是否是问题所在?
        • 是的,昨天我的经理发现他启用了 cors 只是为了发布和获取。
        猜你喜欢
        • 2021-12-10
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 2017-11-16
        • 2018-04-26
        • 1970-01-01
        相关资源
        最近更新 更多