Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么添加额外的头会导致AJAX调用失败_Javascript_C#_Ajax_Asp.net Web Api_Cors - Fatal编程技术网

Javascript 为什么添加额外的头会导致AJAX调用失败

Javascript 为什么添加额外的头会导致AJAX调用失败,javascript,c#,ajax,asp.net-web-api,cors,Javascript,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); }, er

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);
}
我收到以下错误:
加载资源失败:服务器响应状态为403(禁止)
。然而,当我使用Postman时,我只需要添加带有
http://myserver2:296/api/Demo/HelloWorld
url返回字符串

我可以得到一些帮助来解决这个问题吗


我的目标是允许源服务器和正确提供的API密钥一起从Web API获取数据。

API\u密钥头添加到请求中。添加到请求中的任何标题(定义为的标题除外)将触发浏览器发送CORS飞行前选项请求

我不能确定,但您看到的403似乎是来自您的服务器对选项请求的响应,并表示它不希望收到选项请求,也不允许它们

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


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

AJAX请求中的
API_键及其值将放在哪里?它是作为
数据
还是其他方式?可能是重复的,我尝试过,但不幸的是,它对我不起作用。我仍然无法加载资源:服务器响应状态为403(禁止)
错误添加CORS是否足够安全,或者我是否需要额外的安全性?我发现了另一个可能的副本。我将在ajax中设置跨域选项。如果那不是发送cors报头。手动添加cors头,就像您是api密钥一样感谢您的响应。为什么它在没有API-KEY的情况下工作是有道理的。。。最后一部分有什么帮助或指导吗?使用CORS是否会使它更安全?当你说配置服务器时,你是指我的API?是的,通过配置服务器,我的意思是,无论服务器端的.asax和.cs etc代码是什么,都会暴露API。因此,一般来说,使用CORS限制对资源的访问的唯一好理由是以下两种情况都是正确的:1/如果资源位于内部网或某种防火墙后面&2/如果在该内部网/防火墙之内,仅通过假设用户在intranet/firewall内有IP地址,就可以访问资源,从而限制对资源的访问。如果这里不是这样的话,那么使用限制性CORS将一无所获。如果您正在对资源进行其他身份验证,您也不会从添加CORS限制中获益。谢谢您的步骤。至于你的第一个评论,是否有一个关于如何一步一步实现的指南?如果我根据评论做了需要做的事情,我可以删除cors吗?