【问题标题】:405 Method Not Allowed despite CORS405 不允许使用 CORS 的方法
【发布时间】:2018-06-16 19:13:49
【问题描述】:

我正在尝试使用 Angular 开发前端应用程序。由于我在 HTTP POST 和 GET 请求中添加了 授权标头,我得到 405 Method Not Allowed,尽管我似乎允许服务器端的所有内容。

我的浏览器 Chrome 中的调试器说它要求Access-Control-Request-Method: POSTAccess-Control-Request-Headers: authorization,我的后端允许access-control-allow-methods: GET, POSTaccess-control-allow-headers: authorization 以及access-control-allow-credentials: true

我看不出我在这里缺少什么。服务器是 node.js express 服务器,headers 设置如下:

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Headers', 'authorization');

前端代码(Angular 5)如下所示:

this.http.request('post', apiUrl, {
  headers: new HttpHeaders().set('Authorization', 'Bearer abc'),
}).subscribe(response => {
  // some code
});

this.http 是 Angular 的 HttpClient 的一个实例。

我的前端应用程序来自我的本地主机域“http://frontend.localhost/app”,我的后端服务器位于“http://backend.localhost”。

我的问题是,我是否缺少一些必须在后端设置的标头?我需要在前端应用程序中设置一些选项吗?

【问题讨论】:

  • res.setHeader('Access-Control-Allow-Methods', 'GET, POST');,同时添加“OPTIONS”。
  • @TsvetanGanev 我在允许的方法中添加了“OPTIONS”,但错误消息保持不变。

标签: http xmlhttprequest http-headers cors angular-httpclient


【解决方案1】:

我发现我的问题与 CORS 直接相关。我的后端目前只是一个 GraphQL 服务器,它允许 GET 和 POST 请求。

如果我在客户端添加额外的标头,浏览器会通过预检 OPTIONS 请求检查 CORS,到 GraphQL 服务器所在的 URL。这会导致 405 Method Not Allowed GraphQL 服务器产生的错误,而不是 Express 或浏览器。

【讨论】:

  • 西蒙,在旁注中,Access-Control-Allow-Credentials: true 不允许与Access-Control-Allow-Origin: * 一起使用。如果您要传递凭据(授权标头和/或 cookie),您必须在 ACAO 标头中指定特定来源 - 最容易实现为 Access-Control-Allow-Origin: {value of Origin request header}
猜你喜欢
  • 2013-03-13
  • 2014-01-09
  • 2016-08-05
  • 2023-03-10
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多