Cross-Site XMLHttpRequest

2008-01-12 | Tags: ,

Tutti quelli che in qualche modo hanno a che fare col web e con le applicazioni asincrone sanno che un browser non può effettuare una connessione XMLHttpRequest (in seguito XHR) verso un dominio esterno al quello su cui si opera.

Si tratta di una limitazione imposta nelle specifiche del browser e che si può agirare solo realizzando un proxy, cioè un software server (in PHP, .NET, o quale altro preferite) che legge il file sull’altro server e poi lo rende disponibile in locale.

Uno stralcio di codice, che potrebbe funzionare come proxy, potrebbe essere molto semplicemente il seguente:

In realtà si tratta di una cosa abbastanza tediosa e non proprio coerente al concetto di Internet, visto che quello del XHR è solo un altro modo per usufruire di risorse sparse per il web.

Per questo motivo il W3C si è messo al lavoro è ha creato le specifiche W3C Access Control, che aggiungono un nuovo header alle intestazioni HTTP permettono di superare questo limite.

Al momento non tutti i browser supportano queste specifiche; da quanto ne so, solo Mozilla Firefox 3 lo supporta.

In PHP l’implementazione è molto semplice, all’inizio di ogni documento che si desidera rendere fruibile dall’esterno del nostro dominio, basta aggiungere questo header:

Se non intendiamo specificare il dominio ma, piuttosto, desideriamo autorizzare tutti ad accedere alla risorsa, basterà modificare in questo modo la riga:

Si può anche inserire la direttiva direttamente in un documento XML, in questo modo:

Stessa regola per il PHP, se vogliamo autorizzare tutti i domini ad accedere alla risorsa, modificheremo la direttiva in questo modo:

Questa è una innovazione che doveva per forza nascere, il fatto di non poter accedere a risorse esterne è davvero una limitazione inammissibile, specialmente se si hanno le autorizzazioni ad accedere a tali risorse.

Speriamo, comunque, che tutti i browser si adeguino presto alla nuova direttiva.

  1. 1 trackbacks
    1. 2008-01-12 - diggita.it