Quando ho una applicazione integrata e completa e pacchettizzata con tutti i file che servono per farla girare disposti su una stessa area, su uno stesso server, su localhost per esempio, il problema non si pone, perchè di fatto sto giocando a tennis con un muro davanti e sono da solo. Ma quando devo fare delle richieste di lettura dei dati su taluni servizi web disposti su server altrui, può capitare di andare incontro a degli errori e anomalie. Questo perchè i servizi web del server sono in genere abilitati si alle richieste di lettura dei services, ma non tutti per motivi di sicurezza seguono questa politica e potrebbe capitare che io ho uno script che chiede la lettura dal parametro URL di un certo file, che però non viene abilitato a fornire un servizio perchè magari compare un problema simile:
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da http://localhost/esempi/seriea.php. Motivo: richiesta CORS non riuscita!!
Il problema si risolve lato server. Se stiamo costruendo una applicazione si chiede ai tecnici del back-end del sito di intervenire per rendere fruibili dal file contattato le informazioni che nella maggior parte dei casi si possono rendere pubbliche semplicemente inserendo nel file PHP contattato l’istruzione:
<?php header("Access-Control-Allow-Origin: *"); echo "Il Toro ritrova Zaza anche se sta miagolando nei bassifondi della serie A"; ?>
A questo punto se avessi qualcosa del tipo:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Serie A</title> <script src="jquery-3.3.1.min.js"></script> </head> <body> <div id="contenitore"> <div id="contenuto"></div> <button>Scarica dati</button> </div> <script> $(document).ready( function(){ $("button").click( function() { $.get("http://localhost/esempi/seriea.php", function(data, textStatus, jqXHR) { $("#contenuto").text(data); }).fail(function() { alert("Orrore..."); }); } ); }); </script> </body> </html>
e tentassi di recuperare le informazioni, questa volta non avrei problemi di sorta! E’ bene dunque sapere che le chiamate CROSS-ORIGIN (CORS) fanno riferimento a risorse collocate su server altrui che non vedono i nostri HEADER (in informatica e nella commutazione di pacchetto, indica quella parte di un pacchetto, o più in generale della PDU, che contiene informazioni di controllo) abilitati nella richiesta. Inserendo in maniera primitiva:
header("Access-Control-Allow-Origin: *");
abbiamo una risoluzione spartana di primo livello ma comunque funzionante! Quindi teniamo presente questa problematica naturale e come si può risolvere