【问题标题】:Will duplicate "Access-Control-Allow-Origin: *" headers break CORS?重复的“Access-Control-Allow-Origin:*”标头会破坏 CORS 吗?
【发布时间】:2013-03-18 22:18:57
【问题描述】:

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

Access-Control-Allow-Origin: *

标志。所以这可以用 CORS 加载... except (所以我被告知)有一些 IE9 怪癖意味着这在 IE9 中仍然不起作用,但如果这是一个 https 资源它会起作用.

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

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

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

【问题讨论】:

    标签: ajax https http-headers cors


    【解决方案1】:

    CORS spec 明确指出:

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

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

    【讨论】:

    • 规范谈到了重复的标头我不确定这是否与重复的标头有关。
    • 我将其解释为重复值,无论这些值是在同一个标​​题中还是跨多个标题。
    • 如果标头具有不同的值,则为真,但如果它们具有相同的值(完全相同的标头),那就另当别论了,我只是认为在评论中指出这一点很重要,这样人们就会理解如果他们遇到这种情况。
    【解决方案2】:

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

    具有相同值的重复标头可能适用于某些客户端(Chrome 让我们通过,至少在撰写本文时),但作为 Mozilla Developer Network says

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 2018-09-19
      • 2019-06-19
      • 2019-02-07
      • 2021-08-12
      • 2018-03-28
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      相关资源
      最近更新 更多