一尘不染

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

ajax

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/HelloWorldurl
的标头即可返回字符串。

请给我一些帮助,以解决问题。

我的目标是允许原始服务器以及正确提供的API密钥从Web Api取回数据。


阅读 202

收藏
2020-07-26

共1个答案

一尘不染

API_KEY在请求中添加标头会触发您的浏览器首先发送CORS预检OPTIONS请求。除了定义为CORS安全列出的请求标头的标头之外,添加到请求中的 任何
都将触发您的浏览器发送CORS预检OPTIONS请求。

我不能肯定地说,但是您看到的403似乎是服务器响应该OPTIONS请求,并说它不希望收到OPTIONS请求并且不允许它们。

您没有从Postman获得此信息的原因是,与浏览器引擎不同,Postman不实现CORS,因此它不发送OPTIONS请求。(Postman不在浏览器为Web应用程序实施的相同来源的Web安全模型下运行。)

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

2020-07-26