处理跨域报错access-control-allow-origin: Multiple Values

NGINX配置

location / {  
    proxy_pass http://your_backend_server;  
    # 忽略上游的 Access-Control-Allow-Origin 头部  
    proxy_hide_header Access-Control-Allow-Origin;  
    # 在 Nginx 中添加或覆盖 Access-Control-Allow-Origin 头部  
    add_header Access-Control-Allow-Origin "你的值";  # 注意:一定要是具体的域名,不能是*
# add_header Access-Control-Allow-Origin $http_origin; // 或者是这样,支持所有来源
    # 其他必要的代理设置...  
}

或者这样支持某几个域名

 set $cors_origin ""; 
    if ($http_origin ~* "^http://foo.baidu.com$") { 
            set $cors_origin $http_origin; 
    } 
    if ($http_origin ~* "^http://bar.baidu.com$") { 
            set $cors_origin $http_origin; 
    } 
    add_header Access-Control-Allow-Origin $cors_origin; 

本地node代理设置

const express = require('express');
const proxyMiddleware = require('http-proxy-middleware');

const port = 9000;
const proxyTable = {
    '/myProxy': {
        target: 'http://your_backend_server', // 开发环境
        changeOrigin: true, // 是否跨域
        onProxyRes: (proxyRes, req, res) => {  
            // 设置 Access-Control-Allow-Origin 头  
            // 你可以根据需要设置为 '*' 或特定的源  
            proxyRes.headers['access-control-allow-origin'] = '你的值';  
            
            // 还可以设置其他 CORS 相关的头,如果需要的话  
            // proxyRes.headers['access-control-allow-methods'] = 'GET, POST, PUT';  
            // proxyRes.headers['access-control-allow-headers'] = 'Content-Type';  
        },  
        pathRewrite: {
            '^/myProxy': '' // 重写接口 (线上)
        }
    },
};

const app = express();

//设置跨域访问
app.all('*', function(req, res, next) {
    res.header("access-control-allow-origin", "你的值");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

// proxy api requests
Object.keys(proxyTable).forEach(function (context) {
    let options = proxyTable[context];
    if (typeof options === 'string') {
        options = {target: options};
    }
    app.use(proxyMiddleware(options.filter || context, options));
});

app.listen(port);


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容