IE 11, XMLHttpRequest, and CORS



我正在尝试访问托管在子域(即: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
  });
};

提前感谢,
Dan

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

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

如果仍然不起作用,您可能想尝试在IE开发工具中启动F12网络工具,看看是否可以了解请求在过程中失败的更多细节(例如:它可能在CORS飞行前OPTIONS请求中失败)。

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

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

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

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

最新更新