Javascript 访问纽约时报API和维基媒体API的区别是什么?
我目前正在学习这门课程,我正在学习AJAX课程 我的项目是参加一个addrress和:Javascript 访问纽约时报API和维基媒体API的区别是什么?,javascript,ajax,xss,Javascript,Ajax,Xss,我目前正在学习这门课程,我正在学习AJAX课程 我的项目是参加一个addrress和: 载入《纽约时报》文章 从Google Streetview加载背景图像 从维基百科加载相关文章 前两个我都做完了。第三个需要jsonp或CORS,我的问题是:为什么? 前两个工作正常的调用之间有什么区别: http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity&api-key=... http://maps.google
- 载入《纽约时报》文章
- 从Google Streetview加载背景图像
- 从维基百科加载相关文章
jsonp
或CORS
,我的问题是:为什么?
前两个工作正常的调用之间有什么区别:
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=...
注:以上URL为:
- 使用
(纽约时报)搜索文章jQuery.getJSON()
- 用作背景图像的
(谷歌街景)src
- 使用
(维基百科)搜索相关文章jQuery.ajax()
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://...' is therefore not allowed access.
重申一下:维基百科试图阻止什么样的情况
更新:
实际使用的URL为:
http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity%20somestate&api-键=…
http://maps.googleapis.com/maps/api/streetview?size=600x400&location=999%20main%20st,%20somecity%20somestate
https://en.wikipedcwodecgia.org/w/api.php?action=query&format=json&list=search&srsearch=somecity%20somestate&callback=jQuery111107555398044642061_1459988112375&_=1459988112376
- 我不是100%相信维基媒体试图阻止的事情
同源策略是问题的根源,它是来自web应用程序安全模型的一个指令,要求一个页面(HTML文档等)中的
script
s与另一个页面具有相同的来源,以便访问另一个页面的数据
这是一堵文字墙,防止所有的脚本小子在网站上造成破坏和混乱。和所有长城一样,同源政策也是双向的:如果您有数据/访问/服务要消费/使用,您的选择将受到严重限制
一个选项是GoogleMaps/API选项,您可以在其中注册、获取密钥、通过身份验证绕过同源策略
另一个选项是JSONP,其中“p”是围绕JSON数据包装的函数。函数的有效负载JSON可供来自不同来源的script
s访问,因为它作为对象提供,并进入JS全局命名空间。调用该函数会导致浏览器将返回的有效负载作为JavaScript进行评估,并允许它跨源
第三种选择是CORS——跨来源资源共享。它通过对照预选源列表检查发出请求的源来克服同源策略。如果源站在列表上,则会在服务器的头响应中返回,并授予访问权限
同样,我也不完全清楚为什么Wikimedia使用JSONP和CORS来克服同源政策,但允许成员站点之间的访问是这一政策背后的一个主要驱动力。如果使用Wikipedia API,请看这些答案并没有回答我的问题,这不是关于如何,但是为什么。你想要一个不会失败的请求或解释……很确定这主要是为了传统浏览器支持…@albert:不,这就是我希望了解的。:)