【问题标题】:IE 11, XMLHttpRequest, and CORSIE 11、XMLHttpRequest 和 CORS
【发布时间】:2014-08-28 05:53:56
【问题描述】:

我正在尝试访问托管在需要特定标头的子域(即:app.samedomain.com 上的客户端将调用 api.samedomain.com)上的 API 服务(通过 XMLHttpRequest/ajax)出于安全目的进行设置,但我不断收到Access is denied 错误。我发现的所有解决方案都说客户端/最终用户必须将站点添加到“受信任的站点”安全区域,但显然这不是一个真正的解决方案。我需要做什么才能访问带有特定标头的外部网站?

示例代码:

var getUserById = function (user, callback, error) {
  $.support.cors = true; 
  var endpoint = _getApiVersion() + '/person/model/' + user.userId;
  var _headers = _setHeaders(endpoint, null, user, 'GET');
  $.ajax({
    type: 'GET',
    beforeSend: function (request)
    {
      request.setRequestHeader("api-key", _headers['api-key']);
      request.setRequestHeader("timestamp", _headers['timestamp']);
      request.setRequestHeader("content-md5", _headers['content-md5']);
      request.setRequestHeader("content-type", _headers['content-type']);
      request.setRequestHeader("signature", _headers['signature']);
      request.setRequestHeader("Access-Control-Allow-Origin", "*");
    },
    url: _getBaseUrl() + endpoint,
    data: null,
    contentType: 'application/json',
    dataType: 'json',
    success: callback,
    error: error
  });
};

提前致谢,

【问题讨论】:

    标签: ajax internet-explorer cors


    【解决方案1】:

    您是否尝试获取与请求者不在同一个域中的数据?如果是这种情况,唯一的选择是通过服务代理原始请求,以便 XMLHttpRequest 可以访问它。

    【讨论】:

    • 我正在尝试从一个子域中获取数据,即调用将从站点(app.samedomain.com)上的客户端到api(api.samedomain .com)
    • 让我们看一些代码。提交代码是什么样的?
    • 添加了默认提交代码。我一直在搞乱它,现在实际上有 3 种不同的尝试,不同的功能设置。我会尝试将其解析为合理的内容,但如果我发布的内容看起来不合适,请告诉我...
    • 唯一立即跳出的项目是 $.support.cors = true;。我不认为 jQuery 官方可以启用它。
    【解决方案2】:

    “Access-Control-Allow-Origin”是响应头,不是请求头。作为响应的一部分,服务器应将其发送回 IE。

    如果这仍然不起作用,您可能想尝试在 IE 开发工具中启动 F12 网络工具,看看是否可以更详细地了解请求失败的过程中的哪个位置(例如:它可能是CORS 预检 OPTIONS 请求失败)。

    此外,您应该使用“Access-Control-Allow-Origin:app.samedomain.com”来控制哪些域可以访问 API,而不是使用“Access-Control-Allow-Origin: *”

    要了解有关 CORS 的更多信息,请查看 http://www.w3.org/wiki/CORS

    【讨论】:

      【解决方案3】:

      除此之外,这感觉像是一种操作顺序。所有这些都应该在回调之前。

      type: 'GET',
      url: _getBaseUrl() + endpoint,
      data: null,
      contentType: 'application/json',
      dataType: 'json',
      

      【讨论】:

        猜你喜欢
        • 2016-09-21
        • 2013-03-04
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 2015-12-02
        • 2015-01-09
        相关资源
        最近更新 更多