访问控制允许来源多个来源域?
Posted
技术标签:
【中文标题】访问控制允许来源多个来源域?【英文标题】:Access-Control-Allow-Origin Multiple Origin Domains? 【发布时间】:2010-12-11 19:37:59 【问题描述】:有没有办法使用Access-Control-Allow-Origin
标头允许多个跨域?
我知道*
,但它太开放了。我真的想只允许几个域。
例如,如下所示:
Access-Control-Allow-Origin: http://domain1.example, http://domain2.example
我已经尝试了上面的代码,但它似乎在 Firefox 中不起作用。
是否可以指定多个域,还是我只能使用一个域?
【问题讨论】:
Rather than allowing a space-separated list of origins, (origin-list-or-null) is either a single origin or the string "null".(感谢@maxpolk) 使用最新的 Firefox,逗号分隔和空格分隔的域都不起作用。匹配域列表并将单个主机放在标头中仍然具有更好的安全性并且可以正常工作。 如果您正在为 HTTPS 解决这个问题,我找到了 solution。 重要提示:只允许Access-Control-Allow-Origin
标头中的cretain域不意味着其他域无法触发此端点上的方法(例如 REST API 方法)。这只是意味着不允许的来源不能在 javascript 中使用结果(浏览器确保这一点)。为了限制对特定域的端点的访问,请使用服务器端请求过滤器,例如为不允许的域返回 HTTP 401。
当您想使用多个 URL 时,应始终附加 Vary: Origin
标头,请参阅:fetch.spec.whatwg.org/#cors-protocol-and-http-caches
【参考方案1】:
我们也可以在 Global.asax 文件中为 Asp.net 应用程序设置这个。
protected void Application_BeginRequest(object sender, EventArgs e)
// enable CORS
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "https://www.youtube.com");
【讨论】:
【参考方案2】:答案似乎是多次使用标题。也就是说,而不是发送
Access-Control-Allow-Origin: http://domain1.example, http://domain2.example, http://domain3.example
发送
Access-Control-Allow-Origin: http://domain1.example
Access-Control-Allow-Origin: http://domain2.example
Access-Control-Allow-Origin: http://domain3.example
在 Apache 上,您可以在 httpd.conf
<VirtualHost>
部分或 .htaccess
文件中使用 mod_headers
和以下语法执行此操作:
Header add Access-Control-Allow-Origin "http://domain1.example"
Header add Access-Control-Allow-Origin "http://domain2.example"
Header add Access-Control-Allow-Origin "http://domain3.example"
诀窍是使用add
而不是append
作为第一个参数。
【讨论】:
看,当我这样做时,我做了“Header set ...”而不是“Header add ...” - 似乎对我有用。火狐 3.6.16 有一个变体似乎可行:***.com/questions/9466496/… 只花了两个小时试图解决与 CORS 相关的问题,结果发现这是因为多个 Access-Control-Allow-Origin 标头。我删除了多个 Access-Control-Allow-Origin 标头并开始工作。因此,尽管有票数,这不是正确的答案。使用此方法来支持多个域:***.com/a/1850482/123545 specs 明确表示多个值会导致 CORS 算法失败。所以这是不正确的。 也确认这是不正确的。使用它为四个域提供 CSS 时,我在 Chrome 的日志 “[...] 标头包含多个值 'aaa.com, bbb.com',但只允许一个”中收到错误消息。将其定义为一个标头或多个标头或使用add
与set
都没有关系。它只是不起作用。以上是关于访问控制允许来源多个来源域?的主要内容,如果未能解决你的问题,请参考以下文章