jQuery.Ajax“;拒绝访问受限制的URI“;解释?

jQuery.Ajax“;拒绝访问受限制的URI“;解释?,ajax,json,jquery,cors,Ajax,Json,Jquery,Cors,我正在调查本地(file://access)html应用程序中.NET WCF域服务的跨域使用情况。应用程序正在使用jQuery进行AJAX调用 在服务器上没有身份验证(即匿名身份验证)的情况下,我已成功检索到JSON格式的数据,其中CORS“Access Control Allow Origin:*”标头已就位,JSONP格式的数据没有标头 现在,我试图了解身份验证和CORS头与JSON(而不是JSONP)格式数据一起使用时的行为 下面的jQuery代码将向服务器发送一个请求,服务器反过来以“

我正在调查本地(file://access)html应用程序中.NET WCF域服务的跨域使用情况。应用程序正在使用jQuery进行AJAX调用

在服务器上没有身份验证(即匿名身份验证)的情况下,我已成功检索到JSON格式的数据,其中CORS“Access Control Allow Origin:*”标头已就位,JSONP格式的数据没有标头

现在,我试图了解身份验证和CORS头与JSON(而不是JSONP)格式数据一起使用时的行为

下面的jQuery代码将向服务器发送一个请求,服务器反过来以“HTTP/1.1 401 Unauthorized”响应

以下jQuery代码不会向服务器发出请求,并立即抛出异常“拒绝访问受限URI”,代码1012

$.ajax({
    url: myUrl,
    dataType: 'json',
    cache: false,
    complete: function () { /* do stuff */ },
    timeout: 5000,
    username: "chris",
    password: "password",
    data: myData
});
我理解并期待第一个案例。有人能给我解释一下第二种情况的例外情况吗?我本来希望至少能提出这个请求


编辑:Grrr,这在FF 10.0.2中。Chrome似乎和我预期的一样,这是FF问题吗?

您可以使用回调函数来克服这一问题:

如果在跨源请求中使用cookie或HTTP basic auth用户名/密码字段等凭据,还需要将XHR上的“withCredentials”标志设置为true。在jQuery中,这是通过$.ajax调用上的xhrFields属性完成的。将代码更改为

$.ajax({
    url: myUrl,
    dataType: 'json',
    cache: false,
    complete: function () { /* do stuff */ },
    timeout: 5000,
    username: "chris",
    password: "password",
    data: myData,
    xhrFields: { withCredentials: true }
});

另外,另一端的服务器不能使用“*”作为带有凭据的访问控制允许源站标头。相反,它必须为发送给它的源标题提供精确匹配。

我意识到我可以通过jQuery.ajax回调函数之一捕获错误,或者使用JSONP回调函数-这就是你的意思吗?我的问题是,为什么(可能只是Firefox)没有发出请求,而是在这种情况下引发了一个错误。
$.ajax({
    url: myUrl,
    dataType: 'json',
    cache: false,
    complete: function () { /* do stuff */ },
    timeout: 5000,
    username: "chris",
    password: "password",
    data: myData,
    xhrFields: { withCredentials: true }
});