尽管CORS

时间:2018-01-07 17:14:35

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

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

enter image description here

我浏览器中的调试器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服务器,标头设置如下:

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的实例。

我的前端应用程序是从我的localhost域“http://frontend.localhost/app”提供的,我的后端服务器位于“http://backend.localhost”。

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

1 个答案:

答案 0 :(得分:2)

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

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