Angular:HTTP GET 请求 - OPTIONS 405(不允许的方法)

Posted

技术标签:

【中文标题】Angular:HTTP GET 请求 - OPTIONS 405(不允许的方法)【英文标题】:Angular: HTTP GET request - OPTIONS 405 (Method Not Allowed) 【发布时间】:2019-05-15 20:11:59 【问题描述】:

我正在尝试向我的 API 发出 HTTP GET 请求,它返回 OPTIONS 405 (Method Not Allowed)

从源访问“apiurl”处的 XMLHttpRequest “http://localhost:4200”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

下面是我的代码:

 const header = new HttpHeaders();
 const request_header = header.append('Authorization', this.token.toString());

 console.log(request_header.get('Authorization'));

 this.urlList = buildUrl('myurl/', path: 'mypath');

 return this.http.get(this.urlList,headers: request_header );

我尝试在 Postman、C# 控制台应用程序和 ASP.NET WebForms 中做同样的事情,它运行良好,但在 Angular 中我得到了上面提到的错误。我也在 TypeScript 中对我的登录有一个 HTTP GET 请求,它完美运行

**注意:我无法访问后端,但基于 C# 和 Postman 可以正常工作。

更新: 谢谢你们,只是为了让你们知道我最终使用 Flask 和 angular 来提出请求,它很棒。

【问题讨论】:

这与角度无关,这是拨打电话时的身份验证问题。您应该尝试确保您通过服务所需的正确请求标头的身份验证令牌或 cookie 值。 我已经尝试过一千种不同的方法和组合,但似乎没有一个有效。在 Angular 中是否有不同的请求方式? 你见过this answer about headers being immutable?一年前我也遇到过类似的问题。 我通常这样做:httpOptions: any = headers: new HttpHeaders( Authorization:' my_key_for_authentication' ) ; 在服务中,我获取标头并在发出请求时传递给 HttpClient:const headers = this.httpOptions.headers; return this.httpClient .get($this.baseUrl/muurl, headers, params ) How to solve 'Redirect has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header'?的可能重复 【参考方案1】:

这是一个 CORS 问题。托管 REST API 的网络服务器与托管 Angular 静态文件的网络服务器运行在不同的域上。

确保您没有在 localhost 上运行 Angular 并在单独的域或类似的东西上运行 REST API。理想情况下,您应该从同一个域运行两者。

配置 REST API 托管服务器以允许来自 Angular 托管服务器 (localhost) 的 CORS。

【讨论】:

我的 API 在 172.25.x.x 上,我也在 172.25.x.x 上。而且我的登录请求以这种方式工作,只是这个没有(但它同样适用于谷歌浏览器上的网络表单)。 @K.Anye 然后使用 172.25.x.x:4200 而不是 localhost:4200 访问您的 Angular UI @K.Anye 运行在一个域上的 javascript 不能在另一个域上进行 HTTP 调用。在您的问题中,我看到您正在使用 localhost:4200 访问 UI。要么确保使用 localhost 访问 API 和 UI,要么使用相同的 IP 访问两者。如果您不能这样做,请将您的服务器配置为允许来自 IP 或 localhost 的 CORS,无论您使用什么来访问 UI。请阅读 CORS 非常感谢!会的!【参考方案2】:

邮递员在这里获取资源不会有任何问题。

但是由于您来自 Angular 服务器的请求出现跨域错误,您需要使用 API 设置后端,在 Access-Control-Allow-Origin 标头中设置您的角度服务器地址,以便您访问请求的资源。

如果您将 Access-Control-Allow-Origin 标头设置为 *,它将允许任何服务器获取资源,但这并不安全,因为任何人都可以在未经您许可的情况下获取您的资源。

【讨论】:

以上是关于Angular:HTTP GET 请求 - OPTIONS 405(不允许的方法)的主要内容,如果未能解决你的问题,请参考以下文章

Angular:HTTP GET 请求 - OPTIONS 405(不允许的方法)

Angular 跨域请求 CORS 失败,但节点 http.get() 成功返回

Angular HTTP GET 请求未按预期工作

Angular $http 返回“no access control allow origin”标头,但 jQuery $.get 请求返回信息

Angular2:http.get 返回“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”

通过 Angular 5 和 Spring Sec 5 中的 HTTP GET 请求对用户进行身份验证