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)