带通配符的CORS URL匹配规则及合规校验需求
如何校验符合特定规则的CORS允许URL?
嘿,针对你需要筛选满足特定规则的CORS允许URL的需求,我整理了一套清晰的方案,包括规则拆解、示例对比和实用的验证正则,帮你精准搞定这个问题:
核心规则拆解
- 协议限制:仅允许
http或https协议,其他协议(如ftp、ws等)一律不通过 - 特殊主机支持:允许
localhost作为主机名,同时支持合法的IPv4地址(比如127.0.0.1) - 主机字符规则:主机名中可包含
-字符,但不能出现其他非合法域名字符(除了通配符*和分隔用的.) - 通配符规则:仅支持
*匹配整个子域名段或整个后缀段,比如*.example.com是合法的,但m*y.example.com这种仅部分匹配分段的通配符不允许 - 顶级域名(TLD)要求:必须存在有效的顶级域名,不能出现
http://example这类无后缀的URL - 段长度限制:URL中每个主机分段(协议后的各部分)的长度必须在1到63字符之间,超长分段直接判定为非法
合法URL示例
https://localhost.localdomainhttp://127.0.0.1http://*.example.comhttps://my-sub-domain.example-co.uk
非法URL示例
ftp://example.com(使用了非允许的协议)http://m*y.example.com(通配符仅部分匹配子域名段)http://this-is-an-extremely-long-segment-that-is-way-more-than-sixty-three-characters.example.com(主机分段长度超过63字符限制)http://example(缺少必填的顶级域名)
实用验证正则表达式
你可以用下面的正则表达式来快速验证URL是否符合规则:
^(https?://)(localhost|(\*\.([a-zA-Z0-9-]{1,63}\.)+[a-zA-Z0-9-]{2,63})|(([a-zA-Z0-9-]{1,63}\.)+[a-zA-Z0-9-]{2,63})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$
正则简要说明
^(https?://):精准匹配开头的http://或https://协议localhost:单独匹配localhost主机名(\*\.([a-zA-Z0-9-]{1,63}\.)+[a-zA-Z0-9-]{2,63}):匹配带通配符的域名,确保*占据整个子域名段,且所有分段长度符合1-63的要求(([a-zA-Z0-9-]{1,63}\.)+[a-zA-Z0-9-]{2,63}):匹配常规多级域名,保证每个分段长度合规且存在有效TLD(([0-9]{1,3}\.){3}[0-9]{1,3}):匹配IPv4地址(注:这里是基础匹配,若需严格校验IP范围(如0-255),可以进一步调整正则)
内容的提问来源于stack exchange,提问作者Cortlendt
相关产品推荐
相关产品推荐

