这个问题之前已经在这里被问过,并给出了一系列很好的答案,主要是:访问控制允许来源多源域? https://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains
然而,对于应采取的批准方法的解释似乎存在差距。通读 W3 文档,我们发现在我看来存在指导冲突。
首先我们看到给出的答案为right在之前的许多答案中都采用了这种方法,这表明主机服务器必须动态回显给定的“来源”(如果它出现在预定义的“白名单”上)。http://www.w3.org/TR/cors/#resource-implementation http://www.w3.org/TR/cors/#resource-implementation
然而,使用的许多答案和方法也提到了一个空格分隔的列表,它也可以用作传递多个“起源”以允许的方法。如果我们看一下 W3 文档的另一部分:http://www.w3.org/wiki/CORS_Enabled http://www.w3.org/wiki/CORS_Enabled我们在页面的第一部分看到这样的示例:
Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com
在这两种方法中,我同样乐意合并其中任何一种,但是可能需要列出大量 URL 列表,因此我想确保我第一次就正确执行此操作。如果有人对上述两种方法有任何见解,我将非常感激听到您选择中的决定,并且如果有关于我可能错过的推荐方法的明确指南。
有关于此的文档似乎暗示它允许使用空格分隔列表的多个来源,但这并不是它的实际含义。以下是我能收集到的对你的问题最明确的答案:Access-Control-Allow-Origin
header 的值应该与Origin
只要您愿意,就可以使用标头。
您发送回客户端的不是白名单的原因是因为从技术上讲,客户端可以发送空格分隔的来源列表,以便服务器可以验证请求。源列表的目的是因为请求可能来自多个源(即请求跨域重定向)。测试套件 http://w3c-test.org/cors/redirect-origin.htm即使永远不会生成空格分隔的列表(至少由 Firefox 生成),也可以通过不同的重定向可能性轻松观察到此行为。
这在第一个下部有说明链接的 W3C 文档 http://www.w3.org/TR/cors/#access-control-allow-origin-response-header您提供:
Access-Control-Allow-Origin 标头通过在响应中返回 Origin 请求标头的值、“*”或“null”来指示资源是否可以共享。 ABNF:
访问控制允许来源 =“访问控制允许来源”“:”来源列表或空 https://www.rfc-editor.org/rfc/rfc6454#section-7.1 | "*"
实际上,origin-list-or-null 的产生受到更多限制。它不是允许以空格分隔的来源列表,而是单个来源或字符串“null”。
又在原产地列表的定义 https://www.rfc-editor.org/rfc/rfc6454#section-7.1。此外,它还显示,如果您确实希望允许字符串“null”作为来源,则无论如何它都无法嵌入到来源列表中。
因此,坚持使用基于客户端的动态生成的标头Origin
标头以及是否与您的白名单匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)