Вот интересный кусок, который недавно наткнулся на мой стол. Если вы создаете приложения с помощью Adobe Flash и хотите включить использование Windows Azure для хранения больших двоичных объектов, вам необходимо создать «файл междоменной политики», чтобы клиент Flash мог запрашивать большие двоичные объекты.
Зачем? Потому что этого требует Flash-клиент. В частности:
«Из соображений безопасности фильм Macromedia Flash, воспроизводимый в веб-браузере, не имеет доступа к данным, которые находятся за пределами того веб-домена, из которого был создан SWF». — Источник: междоменная политика для Flash-фильмов
Так как это связано с использованием хранилища BLOB-объектов Windows Azure из приложений Flash?
Ну, представь это. Вы создаете приложение Flash и размещаете его на своем сайте. Это может быть даже сайт, размещенный в Windows Azure, а может и нет. В любом случае, само приложение имеет «точный веб-домен, из которого был создан SWF», а именно:
Хостинг Платформа | Типичный URL | Исходный домен (как видно из Flash) |
Не Windows Azure Host | http://www.mycompany.com | mycompany.com |
Облачные службы Windows Azure, нет пользовательских CNAME | http://mycompany.cloudapp.net | mycompany.cloudapp.net |
Облачные службы Windows Azure с пользовательским CNAME | http://www.mycompany.com | mycompany.com |
Сайты Windows Azure | http://mycompany.azurewebsites.net | mycompany.azurewebsites.net |
Сайты Windows Azure, общий или зарезервированный режим, с настраиваемым доменным именем | http://www.mycompany.com | mycompany.com |
Теперь возникает проблема. Когда вы обращаетесь к хранилищу BLOB-объектов Windows Azure, домен, который будет обслуживать ваши большие двоичные объекты, станет поддоменом http://blob.core.windows.net (что-то вроде http://yourcompany.blob.core.windows .сеть), и это не совпадает с _any_ из этих доменов здесь. По умолчанию Flash не разрешает вам доступ к этому домену, если вы не можете обслуживать файл crossdomain.xml из этого домена. Этот файл политики представляет собой небольшой XML-файл, который дает Flash Player разрешение на доступ к данным из данного домена без отображения диалогового окна безопасности. Когда он находится на сервере, он позволяет Flash Player иметь прямой доступ к данным на сервере без запроса доступа пользователя. Но поскольку Windows Azure Blob Storage является службой Azure, это невозможно, верно?
Как оказалось … это возможно. Фактически вы можете разместить файл crossdomain.xml в корневом контейнере хранилища больших двоичных объектов, а затем просто убедиться, что корневой контейнер имеет открытый доступ для чтения. Это выглядит следующим образом:
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("$root"); cloudBlobContainer.CreateIfNotExist(); cloudBlobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });