Hi everyone,
I'm developing an Ajax webservice that query Wikimedia Api Service, but I get a very strange behavior; in fact my query sometimes works perfectly and sometimes doesn't work at all (301 internal redirect) .
This is the response by the server: X-Cors-Redirect-1: 301 https://commons.wikimedia.%E2%80%A6metadata&sroffset=0&callback=?
Could you help me to understand why or what I miss in my code?
This is my code :
$.ajaxPrefilter(function (options) { if (options.crossDomain && jQuery.support.cors) { const https = (window.location.protocol === 'http:' ? 'http:' : 'https:'); options.url = https + '//cors-anywhere.herokuapp.com/' + options.url; } if ( !options.beforeSend) { options.beforeSend = function (xhr) { xhr.setRequestHeader('Api-User-Agent', 'OpenArtImages/Beta (http://localhost:8080; viviana.paga@hotmail.it; Wikipedia User: Vivsss)'); xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); xhr.setRequestHeader('Origin', 'http://localhost:8080'); xhr.setRequestHeader('Strict-Transport-Security', 'max-age=106384710; includeSubDomains; preload');
xhr.withCredentials = true; } } });
firstRequest = $.get( 'https://commons.wikipedia.org/w/api.php?origin=*&action=query&list=s... &prop=imageinfo|pageids|titles&srnamespace=6&rawcontinue=&srinfo=totalhits|suggestion&srlimit='+limit+'&iiprop=timestamp|user|url|size|sha1|mime|metadata'+offset+'&callback=?', function (response) { ///// ........ I get Data ......... ///// }
Thank you so much, Viviana Paga
That header comes from https://cors-anywhere.herokuapp.com/ not MediaWiki. However, its usually set if mediawiki redirects you, which might happen if you are not using https.
However, https://cors-anywhere.herokuapp.com/ is not needed. &origin=* will tell MediaWiki to send appropriate CORS * headers.
On top of that, you don't need CORS headers at all when using &format=json&callback=foo as you could directly inject into a <script> tag. Given you're not doing that, you probably don't want to set callback= as that messes up JSON parsers.
Additionally, you are setting the incorrect content-type header (You're doing a GET, so there should not be a content-type header), the strict-transport-security header doesn't make sense for a client, and if your in a browser, you can't override the origin header (if you're not in a webbrowser, you may be able to override it, but there should be no need to).
So in conclusion, you probably want to get rid of all ajaxPrefilter stuff except the part setting Api-User-agent. You also probably want to get rid of &callback= in the url, so you can properly parse the returned data using JSON.parse
-- Brian
On Sat, Apr 28, 2018 at 2:33 PM, viviana paga viviana.paga@hotmail.it wrote:
Hi everyone,
I'm developing an Ajax webservice that query Wikimedia Api Service, but I get a very strange behavior; in fact my query sometimes works perfectly and sometimes doesn't work at all (301 internal redirect) .
This is the response by the server: X-Cors-Redirect-1: 301 https://commons.wikimedia.%E2%80%A6metadata&sroffset=0&callback=?
Could you help me to understand why or what I miss in my code?
This is my code :
$.ajaxPrefilter(function (options) { if (options.crossDomain && jQuery.support.cors) { const https = (window.location.protocol === 'http:' ? 'http:' : 'https:'); options.url = https + '//cors-anywhere.herokuapp.com/' + options.url; } if ( !options.beforeSend) { options.beforeSend = function (xhr) { xhr.setRequestHeader('Api-User-Agent', 'OpenArtImages/Beta (http://localhost:8080; viviana.paga@hotmail.it; Wikipedia User: Vivsss)'); xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); xhr.setRequestHeader('Origin', 'http://localhost:8080'); xhr.setRequestHeader('Strict-Transport-Security', 'max-age=106384710; includeSubDomains; preload');
xhr.withCredentials = true; } } });
firstRequest = $.get( 'https://commons.wikipedia.org/w/api.php?origin=*&action=query&list=s... &prop=imageinfo|pageids|titles&srnamespace=6&rawcontinue=&srinfo=totalhits|suggestion&srlimit='+limit+'&iiprop=timestamp|user|url|size|sha1|mime|metadata'+offset+'&callback=?', function (response) { ///// ........ I get Data ......... ///// }
Thank you so much, Viviana Paga
Mediawiki-api mailing list Mediawiki-api@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-api
mediawiki-api@lists.wikimedia.org