如何使用通配符来允许特定域 CORS?
Posted
技术标签:
【中文标题】如何使用通配符来允许特定域 CORS?【英文标题】:How to use wildcards to allow specific domain CORS? 【发布时间】:2020-09-07 20:38:56 【问题描述】:我想允许以allow_origin
的身份访问指定域,像这样
http://anystring.fixed-name.com
这里的 fixed-name.com 是固定域,但域的初始部分可以是任何东西,所以我需要允许 CORS 包括结尾的任何东西 (fixed-name.com)
所以我是这样尝试的
allow_origin: 'http://*.fixed-name.com'
假设http://testdomain-test.com 尝试从这个 URL 访问它,它仍然会抛出 CORS 错误。
【问题讨论】:
【参考方案1】:既然你标记了这个symfony。
您可以直接使用NelmioCorsBundle 执行此操作。
只需安装软件包 (composer req cors
),然后在您的配置中:
nelmio_cors:
allow_origin: ['^https?://.+\.fixed-name.com$']
这将为来自fixed-name.com
子域的任何请求发出特定的 CORS 标头,但不会为任何其他请求发出 CORS 标头。
您可以有一个可能的来源数组,并且该数组的每个元素都可以是一个正则表达式,这样可以为您提供足够的灵活性来处理任何情况(另外,您可以轻松地为 prod 和 dev 使用不同的配置环境变量)。
【讨论】:
nelmio_cors:默认值:allow_credentials:假allow_origin:[]allow_headers:[]allow_methods:[]expose_headers:[] max_age:0 主机:[] origin_regex:假forced_allow_origin_value:〜路径:'^/api ': allow_credentials: true allow_origin: ['^http?://.+\.sam.code.com$'] allow_headers: ['*'] 所以我尝试使用 demo-sam.code.com 访问 api,但遇到了 CORS 问题 您的正则表达式似乎是错误的。如果您使用demo-sam.code
作为域,并且变量部分应该是demo-
,那么适当的正则表达式将是:.+sam.code.com
。您在我的示例中添加了一个句点 (.
),但只有在您使用子域时才会出现。现在只需获得适当的正则表达式即可。该软件包有效,被成千上万的用户使用。
随心所欲地具体或不具体。如果你的域模式太不规则,你最终会匹配很多你不感兴趣的东西。例如。上面的你会匹配demo-sam.code.com
,但你也会匹配anythingelsesam.code.com
。
如果它总是用破折号(-
)在你的正则表达式中使用:'^https?://.+-sam.codecom$'
【参考方案2】:
你不能。 CORS 通配符全有或全无。
相反,根据您的模式(例如使用正则表达式)测试 Origin
请求标头,然后在匹配时将值回显到 Access-Control-Allow-Origin
响应标头中。
【讨论】:
我尝试了 reg exp: allow_origin: ['^http?://*.+-sam.code.com$'] for origin demo-sam.code.com 。但它不工作给 cors 问题这有什么问题? @SunilRawat — 我想无论您使用哪个库读取该值,都不接受正则表达式。 感谢@Quentin,它现在可以工作了。我错过了为我的 resp api 包启用 reg 支持。以上是关于如何使用通配符来允许特定域 CORS?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“CORS 协议不允许同时指定通配符(任何)来源和凭据”错误
CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符
CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符