Преимущество CORS по сравнению с междоменными сообщениями - PullRequest
5 голосов
/ 18 ноября 2011

CORS и междоменный обмен сообщениями выглядят для меня одинаково: они обеспечивают связь между доменами.

Есть ли причины использовать одну против другой?

Ответы [ 2 ]

10 голосов
/ 18 ноября 2011

CORS для запросов ajax или flash, которые обычно не разрешаются flash.Например, если не существует междоменной политики для домена x, и вы извлекаете mp3-файл оттуда через flash для воспроизведения, flash не позволит вам прочитать теги id3 mp3-файла.Для ajax вы не можете выполнить запрос, если целевой сервер не имеет междоменной политики, которая позволяет вашему домену отправлять запросы.

Междоменный обмен сообщениями позволяет вам общаться с iframe вдокумент, который имеет другое происхождение.Например, если у вас есть видео-фрейм youtube, вы можете передать этому фрейму сообщение, чтобы изменить громкость.Обычно никакое общение невозможно, потому что у iframe другое происхождение, поэтому вы ничего не могли бы сделать с iframe на программном уровне.

Причины использования того или иного теперь должны быть понятны.CORS позволяет запрашивать данные из другого источника, в то время как передача сообщений между главным окном и iframe используется, когда вы хотите обмениваться данными с приложением, которое находится внутри iframe, но не в том же источнике.

Практический пример:

1.У вас есть iframe с плеером YouTube.

2.Вы запрашиваете видео для воспроизведения из API данных YouTube (CORS, может быть JSONP, XHR или что-либо еще).

3.Вы теперь передаете междоменное сообщение в iframe, чтобы начать воспроизведение любого видео, запрошенного на шаге # 2

1 голос
/ 18 ноября 2011

Прежде всего вы должны знать, что CORS поддерживается следующими браузерами: Internet Explorer 8+, Firefox 3.5+, Safari 4+ и Chrome. Обратите внимание, что IE7 и более ранние версии Firefox и Safari вообще не поддерживают его. Но событие IE8 имеет некоторые ограничения - оно не поддерживает учетные данные и «предварительные» запросы для отправки на сервер. Кроме того, ваш сервер должен быть готов к запросам CORS, т. Е. Также должна быть выполнена некоторая дополнительная работа на сервере.

Обмен сообщениями между доменами с использованием JSONP или iFrames более универсален с точки зрения поддержки браузера и иногда даже не требует дополнительной работы на стороне сервера.

...