Любой способ установить access-control-allow-origin для окна azure blob
Я храню json blobs на лазуре, к которому я обращаюсь через XHR. При попытке загрузить эти капли я получаю эту ошибку:
XMLHttpRequest не может загрузить http://myazureaccount.blob.core.windows.net/myjsoncontainer/myblob.json?json. Происхождение http://localhost не разрешено Access-Control-Allow-Origin.
Есть ли способ установить заголовок Access-Control-Allow-Origin капли, возвращаемой лазурью?
Ответы
Ответ 1
Windows Azure Storage добавила поддержку CORS 26 ноября 2013 года: Совместное использование ресурсов (CORS) Поддержка Windows Azure Storage Services. Дополнительные сведения и примеры С#/JavaScript - Windows Azure Storage: введение в CORS.
Параметры CORS можно установить в учетной записи хранилища, используя клиентскую библиотеку Windows.Azure.Storage версии 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);
Ответ 2
В настоящее время нет Скотта Хансельмана, менеджера программ для Azure, подтвержденная поддержка для этого скоро появится 4 февраля 2013 года.
Ответ 3
Нет, они еще не добавили этого. Вы можете настроить прокси-сервер в экземпляре Amazon EC2, который извлекает объекты на Azure CDN, а затем возвращает данные с заголовком Access-Control-Allow-Origin, который позволяет вам делать запросы через наш прокси. Вы также можете временно кэшировать материал на прокси-сервере, чтобы помочь в скорости/производительности (это решение, очевидно, попадает туда), но оно по-прежнему не идеальное.
Ответ 4
Вы можете попробовать использовать JSONP.
Идея состоит в том, что вы определяете функцию обратного вызова на вашем сайте, которая будет получать содержимое JSON, а ваш JSON-документ становится файлом JavaScript, который вызывает ваш обратный вызов с требуемыми данными. [Thomas Conté, август 2011 г.
Чтобы сделать это, создайте документ, который переносит содержимое JSON в вызов функции JavaScript:
{ "key": "value", ... }
становится
myFunc({ "key": "value", ... });
Теперь вы не загружаете JSON, но JavaScript, а теги script
не подпадают под действие политики Single Origin. 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.
}
});
Ответ 5
Пока jsonp работает, я бы не рекомендовал его. Прочтите первый комментарий к этому answer для уточнения. Я думаю, что лучше всего использовать CORS. К сожалению, Azure этого не поддерживает. Поэтому, если вы можете, я бы заменил поставщиков хранилища на тот, который делает (Google Cloud Storage)
Ответ 6
Один из полезных Блог 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
});
}
В основном он добавляет некоторые правила в SAS Url, и я могу загружать файлы в blob.