Why is adding an extra header making the AJAX call fail
AJAX电话:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $.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 + '
' +
xmlRequest.statusText + '
' +
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获取数据。
-
AJX请求中的API_KEY和它的值在哪里? 它是data还是其他方式?
-
可能的重复如何使用js或jQuery向ajax请求添加自定义HTTP标头?
-
我试过了,不幸的是它对我不起作用。 我仍然得到Failed to load resource: the server responded with a status of 403 (Forbidden)错误
-
是否足够安全地添加CORS,还是需要额外的安全性?
-
我发现了另一个可能重复。 stackoverflow.com/questions/5750696/。 我会在ajax中设置crossDomain选项。 如果那不是发送cors标题。 手动添加cors标题,就像你是api键一样
-
如何使用其他安全性,以便不是每个人都可以访问CORS旁边的API?
-
试图让它安全,以便它通过pentest。
将API_KEY标头添加到请求会触发浏览器首先发送CORS预检OPTIONS请求。 除了定义为CORS-safelisted请求标头的标头之外,您添加到请求的任何标头都将触发您的浏览器发送CORS预检OPTIONS请求。
我无法确定,但看起来你看到的403是来自你的服务器响应OPTIONS请求,并说它不期望获得OPTIONS请求而不允许它们。
你没有从Postman得到这个的原因是,与浏览器引擎不同,Postman没有实现CORS,所以它不发送OPTIONS请求。 (邮递员不在浏览器为Web应用程序强制执行的同源Web安全模型下运行。)
因此,要使客户端应用程序按预期的方式工作,以便对该服务器进行脚本化的跨源访问,您必须配置服务器以正确的方式响应该CORS预检OPTIONS请求。
-
感谢您的答复。如果没有API-KEY,它的工作原理是有道理的...最后一部分有任何帮助或指导吗?让CORS有点或多安全吗?
-
当你说配置服务器时,你的意思是我的API?
-
是配置服务器,我的意思是服务器端的.asax和.cs等代码是暴露API的。
-
因此,一般来说,使用CORS来限制对资源的访问的唯一正当理由是,如果以下两种情况都成立:1 /如果资源位于Intranet中或者在某种类型的防火墙后面,2 /如果在该Intranet /防火墙内,只能通过假设用户在Intranet /防火墙内部有IP地址来限制对资源的访问,然后他们可以访问资源。如果不是这种情况,那么使用限制性CORS就没有任何好处。如果您在资源上进行其他身份验证,则无法通过添加CORS限制获得。
-
谢谢你的步骤。至于你的第一个评论,是否有关于如何逐步实现它的指南?此外,如果我根据评论做了所需的事情,我可以删除角色吗?
-
我想CORS上最好的一般指南是HTTP访问控制(CORS)文章。它并不是一步一步的,因为很多步骤通常都特定于用于提供Web内容的任何服务器端编程环境。对于ASP.Net,在enable-cors.org/server_aspnet.html上有一些最小的特定文档,然后在docs.microsoft.com/en-us/aspnet/core/security/cors上的微软自己的文档看起来相当不错。
-
至于你是否应该做到CORS,它实际上取决于你想要完成的事情。但如果你的目标是通过某种类型的测试,我真的不认为CORS会影响那种方式。