jQuery vs Browser的同源策略(带OData)

时间:2010-11-02 18:01:19

标签: javascript jquery odata same-origin-policy

我正在构建一个AJAX应用程序来查询OData端点。我一直在用Netflix OData feed进行一些测试,发现了一些我得不到的东西:

当我对url(例如http://odata.netflix.com/v1/Catalog/Titles)发出.ajax()请求时,我收到错误:“Access-Control-Allow-Origin不允许使用Origin null”。但是,当我将相同的URL放入浏览器时,请求会通过,我会收到回复。

我没有得到的根本区别是什么?浏览器如何绕过同源策略?

2 个答案:

答案 0 :(得分:2)

我还将JSONP用于Netflix的OData。它似乎适用于我的应用程序。我已在我的博客http://bit.ly/95HXLM

下发布了代码和说明

下面的一些示例片段:

49.        // Make JSONP call to Netflix
50.     $.ajax({
51.            dataType: "jsonp",
52.            url: query,
53.            jsonpCallback: "callback",
54.            success: callback
55.            });
56.        });
57. 
58.    function callback(result) {
59.        // unwrap result
60.        var movies = result.d.results;
61. 
62.        $("#movieTemplateContainer").empty();
63.        $("#movieTemplate").tmpl(movies).appendTo("#movieTemplateContainer");
64.    }

答案 1 :(得分:1)

相同的源策略适用于从加载来自远程站点的页面的代码内发出的HTTP请求。机器不允许该代码发出来自不同域的内容的新请求,假设您(受控制的用户)可以从haxors.r.us获取内容,但您不希望该网站发布如果没有您的说法,请向bankofamerica.com发送HTTP请求。但是,浏览器应允许您(受控制的用户)向任何地方发出HTTP请求。事实上,随着人类在机器的阴影中消失,我要求它。 我要求了!

您可以从服务器向该URL发出请求,然后将响应传递给客户端上的代码(在您的服务器代码可能选择进行任何类型的过滤或提取之后)。或者,Netflix可能支持JSONP API,这将允许您的客户端代码以脚本提取的方式发出GET请求,并将结果解释为Javascript代码。

还应该注意的是,这个策略与jQuery本身没什么关系。这是XMLHttpRequest机制的基本安全规则。