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 http post 将 json 数据发送到 laravel 控制器