gpt4 book ai didi

angular - IE Edge - 访问控制允许 header 列表中不存在请求 header 授权

转载 作者:可可西里 更新时间:2023-11-01 17:24:19 26 4
gpt4 key购买 nike

在我的 Angular 2 应用程序中,我尝试使用密码和用户名凭据登录到我的后端服务器。到目前为止,在运行我的应用程序和登录时,Chrome 和 Safari 没有遇到任何问题。今天我第一次尝试在 Microsoft IE Edge 中运行该应用程序。但是,当我尝试登录时,出现以下错误:

SEC7123:Request header Authorization was not present in the Access-Control-Allow-Headers list.

我正在使用 angular 2+ 来运行 http 请求。下面是我的登录功能。任何想法可能是什么修复?

loginHttp(username: string, password: string): any {
let headers: any = new Headers();
let data: any = null;
headers.append("Authorization", "Basic " + btoa(username + ":" + password));
headers.append("Content-Type", "application/x-www-form-urlencoded");
return this.http.post(this.authService.getUrl()+ '/login', data, {headers: headers})
.map(res => res.json());
}

更新

检查后端(我们使用 symphony)我们确实在 header 中包含了 CORS:

defaults:
allow_origin: ["%cors_allow_origin%"]
allow_methods: ["GET", "POST", "PUT", "DELETE", "LINK", "UNLINK"]
allow_headers: ["Content-Type", "Authorization", "X-Employee-Id"]
max_age: 3600
paths:
'^/': ~

已解决

最后的问题是与 Symphony 有关。我们使用了 nelmio cors config 但它没有设置标题。无论如何都能正常工作。

最佳答案

确保您允许 CROS

res.setHeader('Access-Control-Allow-Origin', '*');
// methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

注意:我在这个例子中使用了 Express。

documentation 有点变化。希望对您有所帮助。

更新:

我们在使用 Symfony 之前遇到了同样的问题。我找到的解决方案是:

  1. 服务器返回OPTIONS方法,允许CROS
  2. 然后在之后发送 http 动词(GET、POST、...)。

这是我的意思的图像:

enter image description here

RestListner的代码:

class RestListener
{

/**
* Constructor
*/
public function __construct()
{

}

public function onKernelResponse(FilterResponseEvent $event)
{
if (!$event->isMasterRequest())
return;

$responseHeaders = $event->getResponse()->headers;

$responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept, x-wsse, set-cookie, x-sessid');
$responseHeaders->set('Access-Control-Allow-Origin', '*');
$responseHeaders->set('Access-Control-Expose-Headers', '*');
$responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');

$request = $event->getRequest();
$method = $request->getRealMethod();

if (strtoupper($method) === 'OPTIONS') {
header('Access-Control-Allow-Headers: origin, content-type, accept, x-wsse, set-cookie, x-sessid');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Expose-Headers', '*');
header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');
die(json_encode(array(
'message' => 'Accepted',
'status' => 202,
)));
}
}
}

我们使用 symfony 作为后端,使用 Angular 2.x 作为前端。

有了解决方案,CROS就通过了。

关于angular - IE Edge - 访问控制允许 header 列表中不存在请求 header 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com