L'API Wikipedia prend-elle en charge CORS ou seulement JSONP disponible?

Cette question portait sur une autre question , qui a été posée il ya un an. L'auteur a demandé comment faire une demande d'origine croisée en utilisant JavaScript et Wikipedia API et un commentaire était:

En.wikipedia.org ne semble pas permettre CORS

Et il a été conseillé d'utiliser JSONP à la place.

Je sais que je peux utiliser JSONP, mais je préfère CORS si je peux l'utiliser.

J'ai essayé sur 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 }}); 

Et obtenir l'erreur suivante:

XMLHttpRequest ne peut pas charger https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json . La réponse à la demande de pré-vol ne passe pas la vérification du contrôle d'accès: l'en-tête «Accès-Contrôle-Autorisation-Origine» est présent sur la ressource demandée. Origine ' https://fiddle.jshell.net ' n'est donc pas autorisé à accéder.

En-tête de la demande:

 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 

En-tête de réponse:

 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 

Donc, j'ai besoin de confirmation que CORS ne fonctionne pas pour Wikipedia API et j'ai besoin d'utiliser JSONP.

Pour faire des requêtes JavaScript Fetch / XHR vers Wikipedia, ajoutez origin=* aux paramètres de requête URL.

Donc, la base de l'URL dans la question devrait être comme ceci:

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

Voir les documents relatifs à CORS pour le backend de Wikipedia :

Pour les demandes anonymes, le paramètre de chaîne de requête d' origin peut être défini sur * ce qui permettra les demandes de n'importe où.


2016-05-09 réponse originale

Reportez-vous à la section «Activer les requêtes de l'API entre domaines dans les réponses JSON de l'API» , un bug ouvert pour les sites de Wikimedia qui indique qu'ils ne prennent en charge que les requêtes CORS de différents sites de Wikimedia sur d'autres sites de Wikimedia, mais ils ne prennent pas en charge les demandes de CORS provenant de sites externes.

Voir en particulier https://phabricator.wikimedia.org/T62835#2191138 (à partir du 8 avril 2016) qui est un résumé qui indique qu'ils envisagent d'apporter une modification pour permettre la demande CORS à partir de sites externes, mais ils n'ont pas encore activé il.

Mise à jour 2016-07-12

Il semble qu'ils déployeront aujourd'hui le support CORS :

Les demandes d'API cross-domaine non authentifiées sont maintenant possibles. Cela devrait être déployé sur WMF wikis avec 1.128.0-wmf.10, voir https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap pour l'horaire

https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap indique que les dates de déploiement 1.128.0-wmf.10 sont du 12 juillet 2016 au 14 juillet 2016.

2016-08-05 mise à jour

Comme Torvin l' indique dans un commentaire ci – dessous :

Pour déclencher le nouveau comportement, vous devez spécifier l' origin=* dans vos paramètres d'URL. Ceci est actuellement enterré dans la discussion T62835 et n'est pas encore indiqué dans la documentation .