【问题标题】:jQuery.Ajax "Access to restricted URI denied" explanation?jQuery.Ajax“访问受限 URI 被拒绝”解释?
【发布时间】: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 问题吗?

【问题讨论】:

    标签: ajax json jquery cors


    【解决方案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)不发出请求,而是在这种确切情况下引发错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2013-12-21
      相关资源
      最近更新 更多