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

标签 javascript ajax xss

我目前正在使用Udacity Front-End Web Developer Nanodegree当然,我正在学习 AJAX 类(class)。

我的项目是获取地址并且:

  • 加载《纽约时报》文章
  • 从 Google 街景加载背景图片
  • 从维基百科加载相关文章

前两个我已经完成了。第三个需要 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=...

注意:以上网址为:

  • 使用 jQuery.getJSON() 搜索文章(纽约时报)
  • 用作背景图片的src(Google 街景)
  • 使用jQuery.ajax()(维基百科)搜索相关文章

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

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

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

更新:

实际使用的网址是:

  • http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity%20somestate&api-key=...
  • 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 文档等)的脚本与以下内容具有相同的来源:另一个页面,以便访问该其他页面的数据。

这堵真正的墙可以防止所有脚本小子在网站上造成严重破坏和困惑。与所有长城一样,同源策略是双向的:如果您有要消费/使用的数据/访问/服务,您的选择将受到严重限制。

其中一个选项是 Google map /API 选项,您可以在其中注册、获取 key 、通过身份验证绕过同源策略。

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

第三个选项是 CORS - 跨源资源共享。它通过根据预选源列表检查发出请求的源来克服同源策略。如果源位于列表中,则会在服务器的 header 响应中返回,从而授予访问权限。

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

关于javascript - 访问纽约时报 API 和维基媒体 API 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251605/

相关文章:

c# - 使用 javascript (JQuery 请求) 将通知推送到 wp8

javascript - 让我的搜索框容易受到 XSS 攻击

javascript - 在 JavaScript 中取消选中复选框时显示确认消息

javascript - 如何在 IE11 中禁用平滑滚动

Javascript 可以最小化这个 if 语句吗?

javascript - 使用 JavaScript 对单个数组的多个属性进行分组

javascript - AJAX 调用时出错 :Error: NetworkError: DOM Exception 19

javascript - 在不刷新页面的情况下插入记录后显示 <select> 选项

javascript - 在 javascript 变量中保存密码 - 安全隐患?

javascript - JS库来清理从用户那里获得的数据?