2011-11-18 20 views

risposta

10

CORS è per richieste Ajax o richieste flash che normalmente il flash non consente. Ad esempio, se non esiste una politica dei domini per il dominio x e si recupera un file mp3 da lì tramite il flash per la riproduzione, Flash non consente di leggere i tag id3 del file mp3. Per ajax, non è possibile effettuare la richiesta se il server di destinazione non dispone di una norma di dominio incrociato che consente al dominio di effettuare richieste.

La messaggistica tra domini consente di comunicare con un iframe nel documento di origine diversa. Ad esempio, se hai iframe di video di youtube, puoi passare un messaggio a quell'iframe per modificare il volume. Normalmente nessuna comunicazione non sarebbe possibile perché l'iframe ha un'origine diversa, quindi non è possibile fare nulla con l'iframe di youtube a livello di programmazione.

I motivi per utilizzare uno o l'altro, ora dovrebbero essere chiari. CORS consente di richiedere dati da un'altra origine mentre il messaggio che passa tra la finestra principale e un iframe viene utilizzato quando si desidera comunicare con un'app che si trova all'interno dell'iframe ma che non si trova nella stessa origine.

Un esempio pratico:

1.You hanno un iframe che ha un player di YouTube.

2. Si richiede la riproduzione di alcuni video da youtube data api (CORS, potrebbe essere JSONP, XHR o qualsiasi altra cosa).

3.You ora passare un messaggio tra domini per l'iframe per iniziare a giocare qualsiasi del video che avete richiesto nel passo # 2

1

Prima di tutto è necessario essere consapevoli che CORS è supportato dai seguenti browser: Internet Explorer 8+, Firefox 3.5+, Safari 4+ e Chrome. Si noti che IE7 e le versioni precedenti di Firefox e Safari non lo supportano affatto. Ma l'evento IE8 ha alcune limitazioni: non supporta le credenziali e le richieste di "preflight" da inviare al server. Inoltre, il server dovrebbe essere pronto per le richieste CORS, vale a dire un po 'di lavoro aggiuntivo sul server.

La messaggistica tra domini tramite JSONP o iFrame è più universale in termini di supporto del browser e talvolta non richiede lavoro supplementare sul lato server.

+0

Per i browser meno recenti è possibile utilizzare il flash per CORS, ad esempio: http://flxhr.flensed.com/. 'postMessage' richiede comunque un browser moderno. – Esailija

+1

Dovremmo qualificare che il supporto CORS in Exporer 8/9 non è standard rispetto agli altri browser. In particolare jQuery supporta CORS standard ma non equivalente a Explorer. Explorer 10 supporta lo standard CORS anche se mi è stato detto. – hippietrail