Ajax 调用网络 API
Ajax Call To Web API
我正在使用 jquery 对 asp.net Web API 方法进行 ajax 调用,该方法使用授权令牌对请求进行身份验证。这是 ajax 调用:
$.ajax({
url: targetUrl,
type: 'GET',
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " + btoa(token + ":" + password));
},
success: function (data) {
// do stuff
}
});
此调用为 OPTIONS
方法生成 405 Method Not Allowed
。这似乎是 Web 上 CORS 支持的问题 API。
但是,如果从简单的 .NET 控制台应用程序调用 Web API 方法,它会按预期工作:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Headers[HttpRequestHeader.Authorization] = "Basic " + token + ":" + password;
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
如果从 Fiddler 调用它也有效。
如果 Web API 方法不支持 CORS,为什么这些其他调用有效?我在 jQuery 通话中是否遗漏了什么?
P.S。我无法访问 Web API 代码库。
在此先感谢您的帮助!
why do these other calls work?
因为客户端计算机上的浏览器正在访问的网页中的其他调用不是从 JavaScript 运行 发出的。它们是由明确安装在客户端计算机上的软件制作的。
同源策略可以阻止网站 A 使用用户 B 的浏览器从网站 C 使用用户 B 的凭据请求数据。
CORS 是网站 C 告诉浏览器它可以放宽同源策略的一种方式。
由于同源策略不适用于浏览器之外,因此 CORS 规范要求的预检 OPTIONS 请求甚至不会在您的其他测试中发送。
我正在使用 jquery 对 asp.net Web API 方法进行 ajax 调用,该方法使用授权令牌对请求进行身份验证。这是 ajax 调用:
$.ajax({
url: targetUrl,
type: 'GET',
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " + btoa(token + ":" + password));
},
success: function (data) {
// do stuff
}
});
此调用为 OPTIONS
方法生成 405 Method Not Allowed
。这似乎是 Web 上 CORS 支持的问题 API。
但是,如果从简单的 .NET 控制台应用程序调用 Web API 方法,它会按预期工作:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Headers[HttpRequestHeader.Authorization] = "Basic " + token + ":" + password;
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
如果从 Fiddler 调用它也有效。
如果 Web API 方法不支持 CORS,为什么这些其他调用有效?我在 jQuery 通话中是否遗漏了什么?
P.S。我无法访问 Web API 代码库。
在此先感谢您的帮助!
why do these other calls work?
因为客户端计算机上的浏览器正在访问的网页中的其他调用不是从 JavaScript 运行 发出的。它们是由明确安装在客户端计算机上的软件制作的。
同源策略可以阻止网站 A 使用用户 B 的浏览器从网站 C 使用用户 B 的凭据请求数据。
CORS 是网站 C 告诉浏览器它可以放宽同源策略的一种方式。
由于同源策略不适用于浏览器之外,因此 CORS 规范要求的预检 OPTIONS 请求甚至不会在您的其他测试中发送。