wil*_*iam 3 regex node.js cors express
我正在创建一个express服务器。这是片段。
const app = express();
app.use(cookieParser()); // mainly used to retrieve and store CSSO tokens
app.use(bodyParser.json());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "https://the.real.url.com:8081");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Expose-Headers", "Content-Disposition, Content-Type");
res.header("Access-Control-Allow-Credentials", true);
next();
});
Run Code Online (Sandbox Code Playgroud)
它目前正在工作。但我需要替换https://the.real.url.com:8081为regex. 首先,它可以是https或只是http。其次,可能有也可能没有港口。等等。
所以当我编辑它https?://the.real.url.com:8081以允许http和https.
我收到这个错误
The 'Access-Control-Allow-Origin' header contains the invalid value 'https?://the.real.url.com:8081'. Origin 'https://the.real.url.com:8081' is therefore not allowed access.
我还尝试了http(s?)://the.real.url.com:8081、https?://*和其他变体。它们都不起作用。
所以我在想Regex是不是不允许?但通配符*有效。
难道我做错了什么?
标Access-Control-Allow-Origin头可以是:
*允许来自任何地方/路径您不能在那里放置正则表达式。
您可以将正则表达式应用于请求Origin中的标头,如果匹配,则将值从请求标头复制到响应标头。OriginAccess-Control-Allow-Origin
var origin = req.get("Origin");
if (origin && origin.match(your_regex)) {
res.header("Access-Control-Allow-Origin", origin);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以只使用 CORS 中间件,它具有针对这种情况的配置选项。
您是否查看过快递的 cors 包:https : //github.com/expressjs/cors,这允许您使用正则表达式作为原点:
var express = require('express');
var cors = require('cors');
var app = express();
var corsOptions = {
origin: /example\.com$/,
methods: "GET,HEAD,PUT,PATCH,POST,DELETE"
};
app.use(cors(corsOptions));
Run Code Online (Sandbox Code Playgroud)
您还可以在单个端点上使用此包,例如
app.get('/test/', cors(corsOptions), function (req, res, next) {
res.json({msg: 'Success'});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |