Richieste CROSS-ORIGIN: quando il server che riceve le richieste Ajax non abilita la lettura dei dati, come si risolve?

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

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...