Node Express 服务器中的 CORS 正则表达式

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:8081regex. 首先,它可以是https或只是http。其次,可能有也可能没有港口。等等。

所以当我编辑它https?://the.real.url.com:8081以允许httphttps.

我收到这个错误 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:8081https?://*和其他变体。它们都不起作用。

所以我在想Regex是不是不允许?但通配符*有效。

难道我做错了什么?

Que*_*tin 5

Access-Control-Allow-Origin头可以是:

  • *允许来自任何地方
  • 以特定 URL 作为/路径

您不能在那里放置正则表达式。


可以将正则表达式应用于请求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 中间件,它具有针对这种情况的配置选项


Ter*_*nox 5

您是否查看过快递的 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)