Любой способ установить access-control-allow-origin для blob-объекта Windows azure
Я храню JSON blobs в azure, к которым я обращаюсь через XHR. При попытке загрузить эти капли я получаю эту ошибку:
XMLHttpRequest не может загрузить http://myazureaccount.blob.core.windows.net/myjsoncontainer/myblob.json?json. Происхождение http://localhost не допускается с помощью Access-Control-Allow-Origin.
есть ли способ установить Управление Доступом-Разрешить-Origin заголовок blob-объекта, возвращаемого azure?
6 ответов
Windows Azure Storage добавлена поддержка CORS 26 ноября 2013 года:поддержка совместного использования ресурсов (CORS) для служб хранения Windows Azure. Подробнее и примеры C#/JavaScript -хранилище Windows Azure: представляем CORS.
параметры CORS можно установить в учетной записи хранения с помощью Windows.Лазурный.Клиентская библиотека хранилища версии 3.0.1.0 или более поздней, доступная из NuGet, используя что-то похожее на следующее псевдокод:
var storageAccount = CloudStorageAccount.Parse(
"DefaultEndpointsProtocol=https;AccountName=ABC;AccountKey=XYZ");
var blobClient = storageAccount.CreateCloudBlobClient();
var serviceProperties = blobClient.GetServiceProperties();
serviceProperties.Cors.CorsRules.Clear();
serviceProperties.Cors.CorsRules.Add(new CorsRule() {
AllowedHeaders = { "..." },
AllowedMethods = CorsHttpMethods.Get | CorsHttpMethods.Head,
AllowedOrigins = { "..." },
ExposedHeaders = { "..." },
MaxAgeInSeconds = 600
});
blobClient.SetServiceProperties(serviceProperties);
в настоящее время нет, но Скотт Хансельман, менеджер программ для Azure, имеет подтвержденная поддержка для этого в ближайшее время 4 февраля 2013 года.
Неа, они еще не добавили это. Вы можете настроить прокси-сервер на экземпляре Amazon EC2, который извлекает объекты из Azure CDN, а затем возвращает данные с заголовком Access-Control-Allow-Origin, который позволяет выполнять запросы через наш прокси-сервер. Вы также можете временно кэшировать материал на прокси-сервере, чтобы помочь со скоростью / производительностью (это решение, очевидно, принимает удар там), но это все еще не идеально.
один из полезных блог MSDN это может помочь вам всем.
код, который я не было
private static void ConfigureCors(ServiceProperties serviceProperties)
{
serviceProperties.Cors = new CorsProperties();
serviceProperties.Cors.CorsRules.Add(new CorsRule()
{
AllowedHeaders = new List<string>() { "*" },
AllowedMethods = CorsHttpMethods.Put | CorsHttpMethods.Get | CorsHttpMethods.Head | CorsHttpMethods.Post,
AllowedOrigins = new List<string>() { "*" },
ExposedHeaders = new List<string>() { "*" },
MaxAgeInSeconds = 1800 // 30 minutes
});
}
он в основном добавляет некоторые правила в Url SAS, и я могу загружать свои файлы в blob.
вы можете попробовать использовать JSONP.
идея заключается в том, что вы определяете функцию обратного вызова на своем сайте, которая будет получать содержимое JSON, и ваш документ JSON становится файлом JavaScript, который вызывает ваш обратный вызов с требуемыми данными. [Томас Конте, август 2011 г.]
для этого создайте документ, который обертывает содержимое JSON в вызов функции JavaScript:
{ "key": "value", ... }
становится
myFunc({ "key": "value", ... });
теперь ты не загрузка JSON, но JavaScript и script
теги не подлежат единой политике происхождения. библиотека jQuery предоставляет удобные методы загрузки JSONP:
$.ajax({
url: 'http://myazureaccount.blob.core.windows.net/myjsoncontainer/myblob.jsonp?jsonp',
dataType: 'jsonp',
jsonpCallback: 'myFunc',
success: function (data) {
// 'data' now has your JSON object already parsed
// and converted to a JavaScript object.
}
});
пока JSONP работает, я бы не рекомендовал его. Прочитайте первый комментарий к этому ответ для конкретики. Я думаю, что лучший способ обойти это-использовать CORS. К сожалению, Azure не поддерживает это. Поэтому, если вы можете, я бы изменил поставщиков хранения на тот, который делает (Google Cloud Storage например)