将复制“Access-Control-Allow-Origin:*”标题会破坏CORS吗?

时间:2013-03-28 13:00:32

标签: ajax https http-headers cors

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

Access-Control-Allow-Origin: *

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

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

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

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

2 个答案:

答案 0 :(得分:6)

CORS spec明确指出:

  

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

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

答案 1 :(得分:2)

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

拥有相同值的重复标题可能适用于某些客户端(Chrome允许通过,至少在撰写本文时)但是Mozilla Developer Network says

  

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

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