IE Edge - Access-Control-Allow-Headers 列表中不存在请求标头授权

嘉科技

在我的 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),我们确实在标头中包含了 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 配置,但它没有设置标题。无论如何都可以工作。

雷多尼娜·马米尼亚纳

确保您允许 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。

文件修改一下。希望能帮助到你。

更新:

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

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

这是我的意思的图像:

在此处输入图片说明

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 就通过了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

django-cors-headers 不起作用:请求的资源上不存在“Access-Control-Allow-Origin”标头

WebSockets请求中的请求资源上不存在“ Access-Control-Allow-Origin”标头

如何解决在请求的资源上不存在“ Access-Control-Allow-Origin”标头

Angular 6和Nodejs:在请求的资源上不存在“ Access-Control-Allow-Origin”标头

在基于Java的Web服务服务器中,在请求的资源错误中如何摆脱不存在``Access-Control-Allow-Origin''标头

请求的资源错误中不存在“ Access-Control-Allow-Origin”标头

keycloak 中请求的资源上不存在“Access-Control-Allow-Origin”标头

请求标头不在Access-Control-Allow-Headers列表中

SEC7123:请求标头密钥不在Access-Control-Allow-Headers列表中

Mailgun API:请求标头字段Access-Control-Allow-Headers不允许授权

错误:请求标头字段在飞行前响应中不允许Access-Control-Allow-Headers进行授权

被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权

节点 JS - CORS - 预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权

请求标头字段在飞行前响应中不允许Access-Control-Allow-Headers进行授权(Jenkins API)

在飞行前响应中,Access-Control-Allow-Headers不允许Sails.js请求标头字段授权

被 CORS 阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

在AJAX请求的请求资源上不存在“ Access-Control-Allow-Origin”标头

请求的资源错误中不存在“Access-Control-Allow-Origin”标头。请求成功但触发失败

XMLHttpRequest无法加载在请求的资源上不存在“ Access-Control-Allow-Origin”标头。起源'http:// localhost:3000'Google地图

Socket.io在请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http:// localhost”

CORS策略阻止了对获取“ url”的访问:在请求的资源上不存在“ Access-Control-Allow-Origin”标头。ReactJS

在提取API django中请求的资源错误中不存在“ Access-Control-Allow-Origin”标头

Java Spring:所请求的资源上不存在“ Access-Control-Allow-Origin”标头

Express JS:所请求的资源上不存在“ Access-Control-Allow-Origin”标头

Flutter:请求的资源上不存在“Access-Control-Allow-Origin”标头

请求的资源上不存在“ Access-Control-Allow-Origin”标头

XMLHttpRequest请求的资源上不存在“ Access-Control-Allow-Origin”标头

Laravel 修复请求的资源上不存在“Access-Control-Allow-Origin”标头