维基百科 API 是否支持 CORS 还是仅支持 JSONP?

2023-12-05

这个问题涉及到另一个问题,这是一年前问过的。作者询问如何使用 JavaScript 和 Wikipedia API 发出跨域请求,一条评论是:

en.wikipedia.org 似乎不允许 CORS

建议他改用 JSONP。

我知道我可以使用 JSONP,但如果可以使用的话我更喜欢 CORS。

我试穿了jsfiddle

var url = "https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json";

                $.ajax({
                    url: url,
                    data: 'query',
                    dataType: 'json',
                    type: 'POST',
                    headers: { 'Api-User-Agent': 'Example/1.0' },
                    origin: 'https://jsfiddle.net/',
                    success: function (data) {
                        console.log(data);
                        //do something with data
                    }});

并得到以下错误:

XMLHttpRequest 无法加载。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。起源 'https://fiddle.jshell.net' 因此不允许 使用权。

请求标头:

authority:en.wikipedia.org
method:OPTIONS
path:/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json
scheme:https 
accept:/ 
accept-encoding:gzip, deflate, sdch 
accept-language:en-US,en;q=0.8,fr-CA;q=0.6,fr;q=0.4,fr-FR;q=0.2,ru;q=0.2,uk;q=0.2 
access-control-request-headers:accept, api-user-agent, content-type 
access-control-request-method:POST 
origin:https://fiddle.jshell.net 
referer:https://fiddle.jshell.net/_display/ 
user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36

响应头:

accept-ranges:bytes 
age:0 
backend-timing:D=33198 t=1462749020308717 
cache-control:no-cache 
content-encoding:gzip 
content-length:20 
content-type:text/html 
date:Sun, 08 May 2016 23:10:20 GMT 
p3p:CP="This is not a P3P policy! See https://en.wikipedia.org/wiki/Special:CentralAutoLogin/P3P for more info." 
server:mw1114.eqiad.wmnet 
set-cookie:CP=H2; Path=/; secure 
set-cookie:GeoIP=US:MA:Waltham:42.37:-71.24:v4; Path=/; secure; Domain=.wikipedia.org 
set-cookie:WMF-Last-Access=08-May-2016;Path=/;HttpOnly;secure;
Expires=Thu, 09 Jun 2016 12:00:00 GMT 
status:200 
strict-transport-security:max-age=31536000; includeSubDomains; preload 
vary:Accept-Encoding 
via:1.1 varnish, 1.1 varnish 
x-analytics:https=1;nocookies=1 
x-cache:cp1066 pass+chfp(0), cp1055 frontend pass+chfp(0) 
x-client-ip:146.115.167.51 
x-content-type-options:nosniff 
x-powered-by:HHVM/3.12.1 
x-varnish:2807049448, 2537048470

因此,我需要确认 CORS 不适用于 Wikipedia API,并且我需要使用 JSONP。


要向 Wikipedia 发出 JavaScript Fetch/XHR 请求,请添加origin=*URL 查询参数。

所以问题中 URL 的基础应该是这样的:

https://en.wikipedia.org/w/api.php?origin=*&action=query…

See 维基百科后端的 CORS 相关文档:

对于匿名请求,origin查询字符串参数可以设置为*这将允许来自任何地方的请求。


2016-05-09 原答案

See “在 API 的 JSON 响应中启用跨域 API 请求”,维基媒体站点的一个开放错误,表明它们当前仅支持从不同维基媒体站点本身到其他维基媒体站点的 CORS 请求,但不支持来自外部站点的 CORS 请求。

特别参见https://phabricator.wikimedia.org/T62835#2191138(自 2016 年 4 月 8 日起)这是一个摘要,表明他们正在考虑进行更改以允许来自外部站点的 CORS 请求,但他们尚未启用它。

2016-07-12 更新

看来他们将会今天部署 CORS 支持:

现在可以进行未经身份验证的跨域 API 请求。这 应使用 1.128.0-wmf.10 部署到 WMF wiki,请参阅https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap对于时间表

https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap表示1.128.0-wmf.10部署日期为2016年7月12日至2016年7月14日。

2016-08-05 更新

As torvin notes 在下面的评论中:

要触发新行为,您需要指定origin=*在你的网址参数中。目前该物品被埋在T62835讨论并且没有在文档 yet.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

维基百科 API 是否支持 CORS 还是仅支持 JSONP? 的相关文章

  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 如何使用 JQuery 动态排序

    如果我有一个下拉列表和一个列表框 有没有办法使用 JQuery 根据下拉列表对列表框进行排序 举个例子会很有帮助 这会改变下拉菜单中的顺序 您必须根据自己的标准设置顺序
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何判断 jquery 对话框是否打开? [复制]

    这个问题在这里已经有答案了 寻找通用案例解决方案来确定当前是否打开任何 jquery 对话框 有多个 试过 ui dialog content dialog isOpen true ui dialog dialog isOpen true
  • jQuery 获取元素内的鼠标位置

    我希望制作一个控件 用户可以在 div 内单击 然后拖动鼠标 然后松开鼠标以指示他们想要的内容有多长 这是针对日历控件的 因此用户将指示特定事件的时间长度 看起来最好的方法是在父 div 上注册一个 mousedown 事件 而父 div
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav

随机推荐

  • (方案)递归函数来计算某些列表的所有可能组合?

    计算所有可能的列表组合的递归函数的示例是什么 例如 combine list 1 2 3 list 1 2 应该返回 1 1 1 2 2 1 2 2 3 1 3 2 这是我的看法 我首先定义一个助手concat map 它需要一个列表和一个
  • OracleCommand命令,ExecuteNonQuery问题

    但是 当我运行以下代码时遇到问题时 我必须清除 Oracle 数据库中的某些表 public static void ClearDataTables IList
  • foreach 循环并返回未定义的值

    我想知道是否有人可以解释为什么这个函数返回undefined而不是建立的对象 var people name John name Dean name Jim function test name people forEach functio
  • cy.origin() 和立即重定向

    我在测试受 oauth 保护的应用程序时遇到问题 当没有公共页面时 问题就会显现出来 如果用户未经过身份验证 就会立即重定向到 OAuth 服务器 我设法以更简单的设置重现该问题 在 fake app 域中运行的假应用程序 在 fake o
  • Android Google Maps,如何让每个Marker InfoWindow打开不同的Activity?

    我使用以下代码段在谷歌地图上显示多个位置 我将这些坐标作为数组获取 在地图上显示标记后 我想在单击标记的信息窗口后进行活动 单个标记的每个信息窗口在单击后应具有不同的活动 我有 4 个标记 我想通过单击信息窗口来访问 4 个不同的活动 我应
  • 如何在 bash shell 中使用部分读取配置文件

    我有这样的配置文件 rsync includes user data conf rsync exclude tmp pyc vendor javascript utils data 我有我想在 rsync 和该文件中的其他配置数据中排除的模
  • 网站真的需要迎合未启用 Javascript 的浏览器吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 为什么许多专业的 Web
  • Objective-C中有没有类似于C#的yield return的东西

    Objective C 中有没有类似于 C 的东西yield return 不 Objective C 中没有任何东西可以让您轻松构建可迭代的解决方案 一般来说 快速枚举Objective C 是使用与 C Java 或 C 完全不同的机制
  • 如何将odoo 8数据库升级到odoo 9?

    我正在尝试将 odoo 安装从 8 0 升级到 9 0 到目前为止我所做的如下 从生产系统备份odoo数据库 在我当前的系统中安装备份数据库作为测试 将 odoo 文件夹复制到我系统上的文件夹中 检查一下 是否一切正常 有用 更新到最新v8
  • 递归调用 Firestore

    我有一个 Firebase Firestore 其中 Components 作为根集合 集合中的每个文档 组件 可能有一个名为 children 的数组 数组中的每个项目都是另一个组件的 id 本质上是一对多关系 由于每个孩子也是一个组件
  • AWS Lambda并发请求限制以及如何增加它?

    我想要同时处理 1000 万个请求 AWS lambda 是否能够做到这一点 因为他们提到 AWS lambda 限制仅为 100 个并发请求 在 AWS 控制台内导航至支持中心 在这里您可以创建一个服务限额增加用于 AWS Lambda
  • 如何让div在页面中居中? (高度宽度)?

    愚蠢的问题 但我找不到答案 因为所有答案都假设 div 的宽度居中 我需要的是以高度和宽度的方式将 div 居中 以便位于页面的非常中心 我尝试了这个 但它只是以页面宽度而不是高度的方式将 div 居中 myDiv width 500px
  • 如何在 GAE 端点中检索自定义用户对象?

    我刚刚在我的谷歌应用程序引擎 Java 应用程序上创建了自己的自定义身份验证 这并不像我接下来要做的事情那么麻烦 身份验证工作正常 但现在我尝试向默认用户对象添加一些附加字段 这样我就不必对服务器进行如此多的调用 到目前为止我所做的是创建一
  • 使用 nohup CLI 在 PHP 后台运行 php 脚本

    我正在尝试在后台运行一个 php 脚本 但它不起作用 我只能直接从 ssh 终端运行 使用相同的 cli 脚本 在终端上 首先我访问路径 cd labs lung com br ztbot bin v2 php之后 我在后台运行我的脚本 n
  • RewriteRule htaccess 如果文件存在

    我想使用 htaccess 来检查 htaccess 文件所在的目录中是否存在名为 Offline txt 的文件 如果存在则执行以下操作 RewriteRule websiteOffline php L 并且对特定范围的 IP 地址也有例
  • 通过 php 发送电子邮件

    我第一次来这里 我有 2 个文件 index html sendemail php At index html我有我的表格的代码 section div class parallax div class container div clas
  • 如何在 Protractor/WebdriverJS 中设置默认浏览器窗口大小

    由于某种原因 当我在工作中运行测试时 浏览器会最大化 但当我在家运行测试时 它只会打开大约 50 宽度的浏览器窗口 这会导致向下滚动等方面出现一些差异 因此我理想情况下希望让它在运行测试的每台计算机上打开相同大小的浏览器窗口 最好的方法是什
  • 打印大型 Swing 组件

    我有一个 Swing 表单 其中有一个 JScrollPane 内的自定义表格 它只是一个 JPanel 而不是 JTable 子类 我正在尝试打印它 如果我只是将整个框架发送到打印机 滚动窗格就会被切断 并且如果我将框架的大小调整为滚动窗
  • DependencyProperty 作为实例变量?

    虽然网络上的大多数代码示例都使用依赖属性的静态声明 但我发现在某些情况下它们被定义为公共只读实例成员 将 DependencyProperty 定义为实例成员 而不是静态 有什么优点吗 Note 我不想讨论静态成员是好还是坏的问题 更具体地
  • 维基百科 API 是否支持 CORS 还是仅支持 JSONP?

    这个问题涉及到另一个问题 这是一年前问过的 作者询问如何使用 JavaScript 和 Wikipedia API 发出跨域请求 一条评论是 en wikipedia org 似乎不允许 CORS 建议他改用 JSONP 我知道我可以使用