2011-07-29 12 views
14

Ben XHR aracılığıyla erişmekte olduğum aziz üzerinde json blobs saklıyorum. Bu blobları yüklemeye çalışırken bu hatayı alıyorum:
XMLHttpRequest, http://myazureaccount.blob.core.windows.net/myjsoncontainer/myblob.json?json yüklenemiyor. Origin http://localhost, Access-Control-Allow-Origin tarafından izin verilmiyor.Bir pencere azure blob için erişim denetimi-izin-kök ayarlamak için herhangi bir yolu

Azure tarafından döndürülen blobun Access-Control-Allow-Origin başlığını ayarlamanın herhangi bir yolu var mı?

cevap

14

, Windows Azure Depolama CORS'yi eklendi Cross-Origin Resource Sharing (CORS) Support for the Windows Azure Storage Services: 26 Kasım 2013 tarihinde desteği. Daha fazla detay ve C#/JavaScript örneği - Windows Azure Storage: Introducing CORS.

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

Hayır, hala buna bunu eklemediniz. Daha sonra bizim proxy üzerinden isteklerini yapmanızı sağlar Erişim-Control-Allow-Origin başlığıyla veri döndürür Azure CDN nesneleri getirir bir Amazon EC2 örneğinde bir proxy ayarlayabilirsiniz. Ayrıca, hız/performansa yardımcı olmak için proxy'de bulunan öğeleri geçici olarak önbelleğe alabilirsiniz (bu çözüm kesin olarak vurulur), ancak yine de ideal değildir.

1

JSONP kullanmayı deneyebilirsiniz.

fikri

JSON içeriği almaları sitenizde bir geri çağırma işlevi tanımlamak olması ve JSON belge bir JavaScript istenen veri ile çağırır senin geri arama dosya haline gelir. [ Thomas Conté, Ağustos 2011]

Bunu yapmak için bir JavaScript işlev çağrısında JSON içeriği sarar bir belge oluşturun:

{ "key": "value", ... } 

Şimdi JSON yüklenmemesi ediyoruz

myFunc({ "key": "value", ... }); 

olur ancak JavaScript ve script etiketleri Tek Kökenli Politika'ya tabi değildir. jQuery convenient methods for loading JSONP sağlamaktadır:

$.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. 
    } 
}); 
1

jsonp eserleri, ben bunu tavsiye etmem. Ayrıntılar için bu answer için ilk yorumu okuyun. Bunun etrafındaki en iyi yolun CORS'i kullanmak olduğunu düşünüyorum. Maalesef, Azure bunu desteklemiyor. Eğer, ben yapar biri (örneğin Google Cloud Storage) şu anda

2

Bir:

CORS seçenekleri

aşağıdaki pseudocode benzer bir şey kullanarak, Nuget temin Windows.Azure.Storage istemci kitaplığı sürümü 3.0.1.0 veya daha sonra kullanan bir depolama hesabına ayarlanabilir yararlı MSDN Blog arasında size hiç yardımcı olabilir. Ben eksikti

kod Temelde SAS Url için bazı kurallar eklemek

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 
    }); 
} 

oldu ve blob benim dosya yüklemek mümkün.

+0

+ 1. Teşekkürler..... – morpheus

İlgili konular