jQuery.Ajax“访问受限 URI 被拒绝”解释?

Posted

技术标签:

【中文标题】jQuery.Ajax“访问受限 URI 被拒绝”解释?【英文标题】:jQuery.Ajax "Access to restricted URI denied" explanation? 【发布时间】:2012-03-17 18:37:40 【问题描述】:

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

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

现在我正在尝试了解当身份验证和 CORS 标头与 JSON(不是 JSONP)格式数据一起到位时的行为。

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

$.ajax(
    url: myUrl,
    dataType: 'json',
    cache: false,
    complete: function ()  /* do stuff */ ,
    timeout: 5000,
    data: myData
);

下面的jQuery代码没有向服务器发出请求,立即抛出异常“Access to restricted URI denied”,代码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 问题吗?

【问题讨论】:

【参考方案1】:

如果您在跨域请求中使用 cookie 或 HTTP 基本身份验证用户名/密码字段等凭据,您还需要将 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 
);

另外,另一端的服务器不能使用“*”作为带有凭据的 Access-Control-Allow-Origin 标头。相反,它必须为发送给它的 Origin 标头提供完全匹配。

【讨论】:

【参考方案2】:

您可以使用回调函数来解决这个问题: http://docs.jquery.com/Ajax/jQuery.ajax#options

【讨论】:

我意识到我可以使用 jQuery.ajax 回调函数之一捕获错误,或者使用 JSONP 回调函数 - 这就是您的意思吗?我的问题实际上是为什么(可能只是 Firefox)不发出请求,而是在这种确切情况下引发错误。

以上是关于jQuery.Ajax“访问受限 URI 被拒绝”解释?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:跨域 AJAX 调用导致“访问受限 URI 被拒绝”(代码 1012)

jQuery.ajax() 函数详解

JQuery AJAX: 了解jQuery AJAX

使用 jQuery 侦听未使用 jQuery.AJAX 加载的 AJAX 加载

jQuery学习之jQuery Ajax用法详解

jquery的ajax