访问纽约时报 API 和维基媒体 API 之间的区别?

The difference between accessing the NY Times API and a Wikimedia API?

我目前正在学习 Udacity Front-End Web Developer Nanodegree 课程,并且我正在学习 AJAX 课程。

我的项目是获取地址并:

我已经完成了前两个。第三个要求 jsonpCORS,我的问题是:为什么?

前两个工作正常的调用之间有什么区别:

http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity&api-key=...
http://maps.googleapis.com/maps/api/streetview?size=600x400&location=...

这个失败了?

https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=...

注意:以上网址为:

来自维基百科尝试的错误消息是:

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://...' is therefore not allowed access.

重申一下:维基百科试图阻止什么情况?

更新:

实际使用的网址是:

我不是 100% 了解维基媒体在这里试图阻止的事情......

Same-origin 策略是您问题的根源,这是 Web 应用程序安全模型中的一条指令,要求一页(HTML 文档等)中的 scripts与另一页同源,以便访问该另一页的数据。

它是防止所有脚本小子在网站上造成破坏和混乱的文字墙。像所有的长城一样,same-origin 政策是双向的:如果你要 data/access/services 成为 consumed/used,你的选择将非常有限。

一个选项是 Google 地图/API 选项,您可以在其中 sign-up 获取密钥,通过身份验证绕过 same-origin 策略。

另一个选项是 JSONP,其中 "P" 是围绕 JSON 数据的函数。该函数的有效负载 JSON 可供来自不同来源的 script 访问,因为它作为 object 提供服务并进入 JS 全局命名空间。调用该函数会导致浏览器将 return 有效负载评估为 JavaScript 并允许它跨源。

第三个选项是 CORS - Cross-origin 资源共享。它通过根据预选源列表检查发出请求的源来克服 same-origin 策略。如果来源在列表中,它会在服务器的 header 响应中 returned,授予访问权限。

同样,我不完全确定为什么维基媒体使用 JSONP 和 CORS 来克服 same-origin 政策,但允许成员站点之间的访问一定是其背后的主要推动力。