Diese Frage bezog sich auf eine andere Frage, die vor einem Jahr gestellt wurde. Der Autor fragte, wie man eine Cross-Origin-Anfrage mit JavaScript und der Wikipedia-API stellt, und ein Kommentar lautete:
de.wikipedia.org scheint CORS nicht zuzulassen
und ihm wurde geraten, stattdessen JSONP zu verwenden.
Ich weiß, dass ich JSONP verwenden kann, aber ich bevorzuge CORS, wenn ich es verwenden kann.
ich probierte an 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
}});
und bekomme folgenden Fehler:
XMLHttpRequest kann nicht geladen werden
https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json. Die Antwort auf die Preflight-Anfrage besteht die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header “Access-Control-Allow-Origin” vorhanden. Herkunft ‘https://fiddle.jshell.net‘ ist daher kein Zugriff erlaubt.
Kopfzeile der Anfrage:
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
Antwortkopfzeile:
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
Ich benötige also eine Bestätigung, dass CORS für die Wikipedia-API nicht funktioniert, und ich muss JSONP verwenden.
Die Preflight-Antwort zeigt an, dass Wikipedia CORS nicht unterstützt – es enthält keines
access-control-allow-origin
und andereaccess-control-allow-xxxx
Überschriften.– Michal Foksa
9. Mai ’16 um 4:50