javascript – 从file://到http://执行XMLHttpRequest的问题

我正在尝试使用
JQuery.ajax从本地文件(file://)执行XMLHttpRequest到http://上的某些内容,并且我可以看到它看起来就像请求已经发出(成功回调被调用,Firebug显示)请求),但根本没有回复.

这基本上就是我在做的事情:

$.ajax({
    url: "https://stackoverflow.com/users/63736/bruce-van-der-kooij",
    dataType: "text",
    success: function(text) {
        alert(text)
    }
})

注意我使用的是数据类型:“text”但是你使用的并不重要.

这将显示空警报.

现在,如果我不得不猜测我必须说这与相同的原始策略有关,但我没有得到典型的NS_ERROR_DOM_SECURITY_ERR异常(错误控制台中根本没有任何内容).

那么有人会对正在发生的事情做出解释吗?

有关

> Problem with making a simple JS XmlHttpRequest call

更新:

所以我遇到了July 2009 article at hacks.mozilla.org似乎解释了将要发生的事情.显然,Firefox> = 3.5实现了Cross-Origin Resource Sharing (CORS) specification,它提供了一种允许您进行跨站点请求的机制.在这种情况下发生的事情在文章中解释:

In Firefox 3.5 and Safari 4, a cross-site XMLHttpRequest will not successfully obtain the resource if the server doesn’t provide the appropriate CORS headers (notably the Access-Control-Allow-Origin header) back with the resource, although the request will go through.

请注意,在我的情况下,请求将使用标头Origin:null发送,并返回200 OK响应.但是,服务器不会发回适当的标头,因此不会检索响应正文.

另见:

> Mozilla Developer Center – HTTP access control

最佳答案 (回答我自己的问题)

请求退出的原因是因为Firefox> = 3.5实现了Cross-Origin Resource Sharing (CORS) specification,它提供了一种机制,允许您进行跨站点HTTP请求.默认情况下,这些请求不会发送任何凭据(HTTP Cookie和HTTP身份验证信息).

但是,如果服务器未向资源提供适当的CORS标头(特别是Access-Control-Allow-Origin),则跨站点HTTP请求将无法成功获取资源.浏览器将忽略响应.

以下是成功跨网站请求的示例(它检索我的YouTube个人资料):

$.ajax({
    url: "http://gdata.youtube.com/feeds/api/users/brucevdk?v=2&alt=json",
    dataType: "json",
    success: function(response) {
        alert(response)
    }
})

如果您查看响应标头,您会看到:

Access-Control-Allow-Origin: *

这意味着“允许来自任何来源的请求”.

资源

> Mozilla Developer Center – HTTP access control
> cross-site xmlhttprequest with CORS

点赞