Angular - JSON Put 和 Delete 返回 403(但邮递员应用程序运行良好)

Posted

技术标签:

【中文标题】Angular - JSON Put 和 Delete 返回 403(但邮递员应用程序运行良好)【英文标题】:Angular - JSON Put and Delete Returns 403 (But postman app works well) 【发布时间】: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'))
 );


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

【问题讨论】:

你的后端使用什么语言? 【参考方案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 请求。解决这个问题的唯一方法是在后端允许来自不同来源的请求。或者可能在本地机器上运行后端。

【讨论】:

但我可以从邮递员应用程序中放置和删除。它也在不同的机器上与服务器。 邮递员会做它自己的魔法。检查这个***.com/questions/36250615/cors-with-postman 我已经要求我的经理检查是否为放置和删除激活了 cors。我现在在等他的回复。感谢您的关注。如果 cors 是问题,我会接受这个答案。 感谢 Cem,您是否设法找出 CORS 是否是问题所在? 是的,昨天我的经理发现他启用了 cors 只是为了发布和获取。

以上是关于Angular - JSON Put 和 Delete 返回 403(但邮递员应用程序运行良好)的主要内容,如果未能解决你的问题,请参考以下文章

Angular,将 JSON 对象推送到服务器

python3 requests模块 基本

通过 angular http post 将 json 数据发送到 laravel 控制器

向 json-server 添加新对象; AngularJS

Angular 5 无法 PUT 并出现 401 错误

错误状态:使用 Node.js (express)、Angular 和 MongoDB 的 PUT 请求返回 404