You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设置Access-Control-Allow-Origin为通配符时CORS仍拒绝带凭证请求?

问题根因

你遇到的报错是CORS安全规范的硬性限制导致的:当跨域请求携带凭证(你的Angular代码中设置了withCredentials: true,会自动携带Cookie、HTTP认证信息等凭证)时,响应头Access-Control-Allow-Origin不允许使用通配符*,必须明确指定和请求头Origin完全匹配的域名。你当前Nginx配置同时返回了Access-Control-Allow-Origin: *和Access-Control-Allow-Credentials: true,不符合规范,所以被浏览器拦截。

修复方案

修改rest-api.mylocal.com对应的Nginx配置,替换通配符Origin配置,同时补充预检请求处理逻辑,示例如下:

server {
    listen 8080;
    listen [::]:8080;
    server_name rest-api.mylocal.com rest-api;

    location /foo {
        # 替换通配符,明确指定允许的跨域源
        add_header 'Access-Control-Allow-Origin' 'http://web-ui.mylocal.com' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        
        # 处理OPTIONS预检请求,直接返回204无内容,减少不必要的处理逻辑
        if ($request_method = OPTIONS) {
            return 204;
        }

        return 200 '{"status": "OK"}';
    }
}
多域名支持配置(可选)

如果后续需要支持多个跨域源访问接口,可以用动态匹配Origin的方式配置,避免硬编码多个域名:

location /foo {
    # 匹配合法的跨域源,可按自己的业务需求调整正则规则
    if ($http_origin ~* "^http://(web-ui.mylocal.com|其他允许的域名1|其他允许的域名2)$") {
        add_header 'Access-Control-Allow-Origin' $http_origin always;
    }
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    
    if ($request_method = OPTIONS) {
        return 204;
    }
    return 200 '{"status": "OK"}';
}
验证方式

修改Nginx配置重载后,清理浏览器缓存重新发起请求,检查响应头的Access-Control-Allow-Origin值是否为http://web-ui.mylocal.com,不再是通配符即可。

内容的提问来源于stack exchange,提问作者DrTeeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:24:03