ajax - jQuery.Ajax "Access to restricted URI denied"解释?

标签 ajax json jquery cors

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

如果服务器上没有身份验证(即匿名身份验证),我已成功检索到 JSON 格式的数据,其中包含 CORS“Access-Control-Allow-Origin: *” header ,以及不带 header 的 JSONP 格式的数据。

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

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

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

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

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

我理解并期待第一种情况。谁能向我解释第二种情况的异常(exception)情况?我预计至少会提出这个请求。

编辑:Grrr,这是 FF 10.0.2 中的。 Chrome 的表现似乎符合我的预期,所以这是一个 FF 问题吗?

最佳答案

如果您在跨源请求中使用 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 header 。相反,它必须为发送给它的 Origin header 提供精确匹配。

关于ajax - jQuery.Ajax "Access to restricted URI denied"解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479422/

相关文章:

c# - 在 C# 中从 Ajax 获取值(value)

javascript - 将 change、mouseup、mousedown、mouseout、keyup 和 keydown 组合到一个函数中

javascript - jQuery 动画剩余时间

javascript - Vue.js 不支持 HTML 文件中的外部 JSON

java - 找不到提供程序 org.glassfish.json.JsonProviderImpl

javascript - 从 HTML 文本文件中提取 JSON 对象

javascript - 一次两个滑动图像

javascript - 使用 Javascript 不会在 View 中调用 Controller 操作

javascript - $.each 功能因对象类型而异

javascript - jquery ajax 调用 "metho"而不是 "method"?