【问题标题】:Force Safari to include Origin header in jQuery GET request强制 Safari 在 jQuery GET 请求中包含 Origin 标头
【发布时间】:2011-09-19 00:30:25
【问题描述】:

来自https://app.example.com 我提出以下请求:

$.get('https://api.example.com', { foo: 'bar' })
  .success(getSuccess)
  .error(getError);

它在 Chrome 和 Firefox 中运行良好,但在 Safari 中却不行。 Safari 不执行预检 OPTIONS 请求或包含 Origin: https://app.example.com 标头,因此服务器不会返回 Access-Control-Allow-Origin: https://app.example.com 标头。

有没有办法强制 Safari 包含 Origin 标头或执行预检 OPTIONS 请求?

【问题讨论】:

    标签: javascript jquery ajax safari cross-domain


    【解决方案1】:

    您可以在beforeSend 事件中向 HTTP XHR 请求添加标头。

    类似:

    $.ajax({
      url: 'https://api.example.com',
      data: { foo: 'bar' },
      beforeSend: function(xhr) {
        xhr.setRequestHeader("Origin", "https://app.example.com");
    }
    })
    .success(getSuccess)
    .error(getError);
    

    【讨论】:

    • Origin 是受限制的标头,无法通过 JavaScript 手动设置。
    • Safari 不支持此标头但限制手动添加?
    • 据我所知,所有主流浏览器都限制添加 Origin。 Safari 支持 POST/DELETE 请求(可能还有其他请求)的 Origin。理想情况下,有一些“启用 GET 请求的来源 = true”选项。
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2017-02-24
    • 2019-09-17
    相关资源
    最近更新 更多