为什么添加额外的标头使AJAX调用失败

时间:2017-01-25 14:44:47

标签: c# ajax asp.net-web-api cors

AJAX电话:

$.ajax({
    url: "http://myserver2:296/api/Demo/HelloWorld",
    type: "GET",
    dataType: 'JSONP',
    jsonp: "callback",
    headers: { 'API_KEY': 'mykey09090' },
    success: function (result) {
        console.log(result);
    },
    error: ajaxFailed
});

function ajaxFailed(xmlRequest) {
    alert(xmlRequest.status + ' \n\r ' +
          xmlRequest.statusText + '\n\r' +
          xmlRequest.responseText);
}

我收到以下错误:Failed to load resource: the server responded with a status of 403 (Forbidden)。但是当我使用Postman时,我只需要添加带有http://myserver2:296/api/Demo/HelloWorld url的标题,它会返回字符串。

我可以帮助您解决问题。

我的目标是允许原始服务器和正确提供的API密钥从Web Api中恢复数据。

1 个答案:

答案 0 :(得分:1)

API_KEY标头添加到请求triggers your browser to first send a CORS preflight OPTIONS request除了定义为CORS-safelisted request-headers的标头之外,您添加到请求的任何标头都会触发您的浏览器发送CORS预检OPTIONS请求。

我无法确定,但看起来您所看到的403是来自您的服务器响应该OPTIONS请求,并且说它不期望获得OPTIONS请求并且不允许它们。

你没有从Postman得到这个的原因是,与浏览器引擎不同,Postman没有实现CORS,所以它不发送OPTIONS请求。 (邮递员不在浏览器强制执行Web应用程序的同源Web安全模型下运行。)

因此,为了使您的客户端应用程序按预期对该服务器进行脚本化跨域访问,您必须配置服务器以正确的方式响应该CORS预检OPTIONS请求。

相关问题