Node Express 服务器中的 CORS 正则表达式
Posted
技术标签:
【中文标题】Node Express 服务器中的 CORS 正则表达式【英文标题】:CORS Regex in Node Express Server 【发布时间】:2018-08-20 18:11:08 【问题描述】:我正在创建一个express
服务器。这是sn-p。
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();
);
目前正在运行。但我需要用regex
替换https://the.real.url.com:8081
。
首先,它可以是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
是不允许的吗?但是通配符*
有效。
我做错了吗?
【问题讨论】:
【参考方案1】:您是否查看过快递的 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));
您还可以在单个端点上使用此包,例如
app.get('/test/', cors(corsOptions), function (req, res, next)
res.json(msg: 'Success');
);
【讨论】:
我做到了。在我阅读的一篇文章(或另一个 *** 答案)中,它说如果我按照我在 sn-p 中所做的方式进行操作,则不需要使用它。这就是为什么我没有使用它。我猜我错了。 好吧,我希望它能让你走得更远! 这是否适用于subdomain.example.com
不是 100% 确定,我希望 subdomain.example.com 应该可以工作,但您需要对其进行测试。如有必要,更改正则表达式很容易。【参考方案2】:
Access-Control-Allow-Origin
标头可以是:
*
允许来自任何地方
以/
为路径的特定网址
你不能把正则表达式放在那里。
您可以将正则表达式应用于 request 中的 Origin
标头,如果匹配,则将 Origin
请求标头中的值复制到Access-Control-Allow-Origin
响应头。
var origin = req.get("Origin");
if (origin && origin.match(your_regex))
res.header("Access-Control-Allow-Origin", origin);
或者你可以只使用has a configuration option for this situation的CORS中间件。
【讨论】:
我认为应该是req.get("origin")
,至少对于快速/连接服务器而言。以上是关于Node Express 服务器中的 CORS 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
React/Node/Express 和 google OAuth 的 CORS/CORB 问题
使用我的 node/express rest api 服务器获取数据时 CORS 被阻止
在 Node.js Express.js 服务器中添加标头后,Chrome 中仍然出现 CORS 错误
使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作