di: Alberto Bottarini 26 Gennaio 2009
La cosiddetta same-domain-policy è una restrizione presente nei recenti browser che impedisce a script scaricati dalla rete di accedere, tramite qualsiasi tipo di richiesta HTTP, a risorse che si trovano su server diversi rispetto a quello iniziale che ha inviato lo script. Questa inibizione non riguarda solo host diversi tra di loro, ma anche processi in ascolto su porte diverse della stessa macchina.
Questo significa che da un qualsiasi script che faccia uso di AJAX e dell'oggetto XmlHttpRequest non è possibile accedere a qualsiasi tipo di risorsa (HTML, XML, JSON, testo) che si trovi su un server (e in ascolto su una porta) diverso da quello di partenza; uno script scaricato dal dominio google.com potrà accedere solamente a file che rispondano a URL che inizino con google.com.
Quella che può sembrare una forte limitazione nello sviluppo di applicazioni web rappresenta invece un fattore importante per la sicurezza dei nostri computer. Basta infatti pensare a quante possibilità esisterebbero per far eseguire al nostro browser codice maligno scaricato da chissà quale server semplicemente aprendo un sito che a prima vista può sembrare innoquo.
Il same-domain-policy è stato introdotto molto tempo fa, all'epoca di Netscape Navigator 2.0 ed è stato attualizzato fino ai browser di recente sviluppo come Firefox e Safari. Ovviamente Internet Explorer segue una sua politica che si discosta da quello che ormai è diventanto uno standard de facto. Il browser di casa Microsoft si affida alle cosiddette security zones permettendo infatti all'utente di scaricare script residenti anche su macchine diverse appartenenti alla stessa LAN.
JSONP è l'acronimo di JSON with Padding e rappresenta una tecnica che permette di ovviare a questa limitazione permettendo a un browser di accedere, ovviamente con alcuni limiti, a risorse remote indipendentemente dall'host di origine.
Il meccanismo di funzionamento è semplice ma alquanto particolare. Affrontiamolo con calma.
Uno dei modi per accedere a script on-demand è quello di modificare il DOM della pagina inserendo un nuovo tag <script> all'interno della testata del documento (DOM Lazy Loading - per approfondire si veda questo articolo uscito tempo fa su HTML:it). Questo approccio, nonstante permetta di accedere a file JavaScript remoti, presenta un grosso limite: non si ha infatti controllo sul codice generato da questa richiesta che verrà eseguoto automaticamente dall'interprete JavaScript appena lo riceverà dal server. Analizziamo un piccolo esempio.
Se all'interno di file JavaScript è presente la definizione di un oggetto libro:
{
title: “I promessi sposi”,
author: “Manzoni”
}
esso verrà interpretato automaticamente senza dare la possibilità al programmatore di modificare il flusso normale di esecuzione del codice e quindi di elaborare i dati ricevuti. Le informazioni verranno lette dall'interprete JavaScript ma non verranno in nessun modo fornite al programmatore che non potrà praticamente elaborarle in nessun modo.
Proprio per questa “mancanza di controllo” l'approccio basato sul DOM Lazy Loading non è molto diffuso all'interno di applicazioni web.
JSONP può essere visto come un'estensione a questo approccio che permette di invocare una funzione di callback automatizzata (come spesso viene fatto per le richieste AJAX basate su XmlHttpRequest) al ricevimento di dati. Immaginiamo infatti lo stesso file JavaScript precedente con una leggera modifica:
displayBook({
title: “I promessi sposi”,
author: “Manzoni”
});
In questo caso grazie all'invocazione automatica appena ricevuto lo script l'interprete eseguirà la funzione displayBook (correttamente definita nel nostro script prima di effettuare la richiesta) avendo a disposizione i nuovi dati scaricati in formato JSON. Immaginiamo infatti di avere nelle nostre pagine la funzione così definita:
function displayBook(book) {
alert(book.title);
}
Cosi facendo abbiamo utilizzato del tutto dati ricevuti da host differenti da quello di partenza!
|
Ottimizzare le Performance di jQuery: cache e concatenazione |
Canvas, guida praticaCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida jQuery UICreare siti ricchi e dinamici con jQuery UI, il progetto ufficiale... |
Guida Javascript: tecniche avanzateUna guida dal taglio pratico per approfondire la programmazione a... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base27 Febbraio 2012 a Milano |
|
|
Corso Webmaster base12 Marzo 2012 a Milano |
|
|
Corso Webmaster base20 Febbraio 2012 a Roma |
|
|
Corso Google AdWords Base28 Marzo 2012 a Roma |