这个问题之前已经在这里被问过并给出了一系列好的答案,主要是:Access-Control-Allow-Origin Multiple Origin Domains?
但是,在应该采用的核准方法方面似乎存在着解释上的差距 . 通过W3文档阅读,我认为这是一个指导冲突 .
首先,我们在许多先前的答案中看到了给出答案的正确方法,该答案规定主机服务器必须动态回显给定的'Origin'(如果它出现在预定义的'whitelist'上) . http://www.w3.org/TR/cors/#resource-implementation
然而,许多使用的答案和方法也提到了空格分隔列表,它也可以用作传递多个'Origins'以允许的方法 . 如果我们看一下http://www.w3.org/wiki/CORS_Enabled的另一篇W3文档,我们在页面的第一部分看到了一个例子:
Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com
在这两种方法中,我同样很乐意将其纳入其中,但是可能会有大量的URL需要列入其中,因此我希望确保我第一次正确地执行此操作 . 如果有人对上述两种方法有任何见解,我将非常感谢您在选择中听到决定,以及是否有可能错过的推荐方法的明确指南 .
2 回答
关于这个的文档似乎意味着它允许多个来源以空格分隔列表,但是我可以收集的是你问题的最明确答案:
Access-Control-Allow-Origin
Headers 应该与Origin
Headers 的值相同,只要Access-Control-Allow-Origin
Headers 可以与Origin
Headers 相同你想允许它 .它来自多个来源(即请求被跨域重定向)的原因 . A test suite使用不同的重定向可能性很容易观察到这种行为,即使永远不会生成空格分隔列表(至少是Firefox) .
这在您提供的第一个linked W3C document中显示为较低:
再次在the definition of the origin list . 此外,它显示如果您确实希望允许字符串"null"作为原点,它无论如何都无法嵌入到原始列表中 .
因此,请坚持使用基于客户端
Origin
标头的动态生成的标头以及是否与您的白名单相匹配 .如果您需要允许包含特定单词“example”的原点,您可以在apache vhost中使用以下配置 .
这将满足以下一些Origin条件:
您可以根据您的要求调整上述正则表达式 .