Aje*_*jey 8 javascript node.js cors express
如何以简化的方式在Express中允许多个域用于CORS.
我有
 cors: {
        origin: "www.one.com";
    }
    app.all('*', function(req, res, next) {
            res.header("Access-Control-Allow-Origin", cors.origin);
            res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            next();
        });
当只有一个域提到时,这个工作 origin
但是如果我想拥有origin一个域数组并且我想为原始数组中的所有域允许CORS,我会有这样的东西 -
cors: {
            origin: ["www.one.com","www.two.com","www.three.com"];
        }
但问题是下面的代码不起作用 -
app.all('*', function(req, res, next) {
                res.header("Access-Control-Allow-Origin", cors.origin);
                res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                next();
            });
如何通过以下方式res.header获取一系列域名cors.origin?
Joh*_*ter 14
我推荐cors-module:https://www.npmjs.org/package/cors 它为你做这种事 - 检查" 配置带动态原点的CORS " - 章节
Ash*_*ith 14
让我们了解这个标头的工作原理."Access-Control-Allow-Origin"仅接受字符串.因此,要使其动态化,您需要从http标头获取请求主机.根据您的授权域阵列进行检查.如果它存在,则将其作为值添加到标头,否则添加默认值将禁止未经授权的域访问API.
没有本机实现.您可以使用下面的代码自己完成.
cors: {
            origin: ["www.one.com","www.two.com","www.three.com"],
            default: "www.one.com"
        }
app.all('*', function(req, res, next) {
                var origin = cors.origin.indexOf(req.header('host').toLowerCase()) > -1 ? req.headers.origin : cors.default;
                res.header("Access-Control-Allow-Origin", origin);
                res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                next();
            });
const cors = require("cors");
app.use(cors({ origin: ["http://localhost:3000", "https://origin2.com"] }));
这将允许来自localhost:3000和的请求origin2.com
使用 Node,cors 中间件,请确保将 / 放在 url 之外,否则如果浏览器中的 url 显示时没有它,则 cors 可能会失败。IE
var corsOptions = {
origin: ["http://www.example.com/","http://localhost:3000"],
optionsSuccessStatus: 200 // For legacy browser support
}
app.use(cors(corsOptions));
失败并会给我 cors 错误,因为浏览器会将 url 显示/读取为http://www.example.com,下面工作并且更具包容性,应该适用于http://www.example.com和任何东西除此之外,即http://www.example.com/或http://www.example.com/blogs/1等
var corsOptions = {
origin: ["http://www.example.com","http://localhost:3000"],
optionsSuccessStatus: 200 // For legacy browser support
}
app.use(cors(corsOptions)); 
小智 5
实际上,只要您希望允许,Access-Control-Allow-Origin 标头应该与 Origin 标头的值相同。
所以基于你的代码
cors: {
    origin: ["www.one.com","www.two.com","www.three.com"]
}
app.all('*', function(req, res, next) {
            let origin = req.headers.origin;
            if(cors.origin.indexOf(origin) >= 0){
                res.header("Access-Control-Allow-Origin", origin);
            }         
            res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            next();
        });
| 归档时间: | 
 | 
| 查看次数: | 15616 次 | 
| 最近记录: |