HTTP 标头 Access-Control-Allow-Origin 中是不是有最大数量的允许来源?
Posted
技术标签:
【中文标题】HTTP 标头 Access-Control-Allow-Origin 中是不是有最大数量的允许来源?【英文标题】:Is there a maximum number of allowed origins within HTTP header Access-Control-Allow-Origin?HTTP 标头 Access-Control-Allow-Origin 中是否有最大数量的允许来源? 【发布时间】:2013-11-26 04:54:05 【问题描述】:我有大约 130 个白标签网站,它们都位于不同的域中,但每个网站上的表单都需要发布到一个共同的端点。我正在尝试通过使用跨域请求共享来实现这一点。
考虑到安全性,我不想使用..
Access-Control-Allow-Origin: *
因此我试图创建一个逗号分隔的域列表以允许,即..
Access-Control-Allow-Origin: http://www.myfirstdomain.com,http://www.myseconddomain.com....
为了在后端实现这一点,我设置了一个 ASP.Net Web API 解决方案,并试图通过使用 System.Web.Http.Cors 库和在“应用程序启动”上定义这些域。
我的“应用程序启动”代码如下所示..
public static void Register(HttpConfiguration config)
var domains = "http://www.myfirstdomain.com,http://www.myseconddomain.co.uk .... about 130 domains more..";
config.EnableCors(new EnableCorsAttribute(domains, "*", "*"));
我正在测试的域是逗号分隔列表中的大约 110 个域,当我尝试 jQuery ajax 帖子时,它首先按预期调用 OPTIONS 方法(以确定请求是否允许)但这会返回错误 Origin http://www.mytestdomain.com is not allowed by Access-Control-Allow-Origin.
但是,如果我将逗号分隔的字符串修改为只有我的域,甚至两个或三个域,OPTIONS 将返回 200 响应并因此允许 POST。
有谁知道这是预期的行为还是可以看出我哪里出错了?
【问题讨论】:
我不知道这种行为,但您可以检查请求的域,如果匹配,则仅为该域发送一个标头 我的第一个猜测是允许域列表中缺少逗号或任何其他小错误(您绝对应该从配置文件/数据库/xml文件/....在源代码中:-) 逗号分隔的字符串是由数据库和字符串构建的。加入,我只是贴出硬编码的字符串以方便阅读 正如@Bartdude 所说,这可能是允许的域之一中的错误(即使是尾随 / 也可能导致问题)。有关验证规则,请参见例如:github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/… 知道了,其中一个域中有一个尾随空格!去展示如果它设法滑入数据库,这会如何搞砸每个网站,很高兴我提前找到了这个,谢谢.. 【参考方案1】:解决方案是我的数据库中有一个带有尾随空格的恶意域。因此,这在传递给 EnableCorsAttribute 时会导致问题,因此请小心您的数据!
【讨论】:
您真的不应该在响应标头中返回所有授权域。以上是关于HTTP 标头 Access-Control-Allow-Origin 中是不是有最大数量的允许来源?的主要内容,如果未能解决你的问题,请参考以下文章