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