2

所以我们有一个提供 JSON 的 http 资源。它增加了一个

Access-Control-Allow-Origin: *

旗帜。所以这可以用 CORS 加载......除了(我被告知)有一些 IE9 怪癖,这意味着这仍然无法在 IE9 中工作,但如果这是一个 https 资源,它会工作。

所以我们设置了一个现有的 https 代理来包含这个资源。只有那个 https 资源还添加了 Access-Control-Allow-Origin: * 标头,因此响应包含两个这样的标头。

这似乎根本不起作用。从实验上看,如果我从“内部”http 资源中删除标头,代理版本(现在只包含一个标头)确实可以工作。只是在 Chrome、Firefox 中使用 jQuery CORS 进行测试。

是对的吗?所以我需要做的就是(有人)修复https代理以“设置”标题而不是“添加”它?

4

2 回答 2

7

CORS 规范明确指出:

如果响应包含零个或多个 Access-Control-Allow-Origin 标头值,则返回失败并终止此算法。

所以你是对的,你应该只有一个Access-Control-Allow-Origin标题。

于 2013-03-28T14:53:59.357 回答
2

如果重复的标头具有不同的值,那么它们将被连接成一个值。正如 monsur 指出的那样,这将导致标头无效,如规范中所述。

具有相同值的重复标头可能适用于某些客户端(Chrome 让我们通过,至少在撰写本文时),但正如Mozilla 开发者网络所说

返回的资源可能有一个 Access-Control-Allow-Origin 标头...

所以,一个标题来控制它们。

于 2014-09-08T16:04:22.400 回答