2016-04-12 17 views
2

içinde birden çok etki alanına nasıl erişilir? Web sitemde www.website.com yerine website.com'u görüntülüyorsanız, SVG'lerin web siteme yüklenmesine ilişkin bazı sorunlar yaşıyorum. Web sitesi bir nginx sunucusunda olduğu, bu yüzden bu katma ve konuyu çözdü:CORS ile SVG'lere nginx

location/{ 
    add_header Access-Control-Allow-Origin "*"; 
} 

Ancak okuduğum kadarıyla kapalı dayanarak, bu bir güvenlik sorunu neden olduğu gibi görünüyor? Sadece www.website.com ve website.com yerine * belirtmenin bir yolu var mı? PHP bu rastladım çünkü sormak ve neye ihtiyacım gibi ama nginx için görünüyor: Access-Control-Allow-Origin üzerine W3 spec birden kökenleri bir boşlukla ayrılmış listesi tarafından belirtilebilir açıklıyor

header('Access-Control-Allow-Origin: http://www.website.com'); 
header('Access-Control-Allow-Origin: http://website.com'); 
+1

[Erişim-Kontrol-İzin-Kökenli Çoklu Kökenli Etki Alanlarının Mümkün çoğaltması?] (Http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains) – StephenKing

+0

@StephenKing değil Bu nginx uygulama için özel olarak soruyor gibi bir dupe. – davidjb

+0

Bu sayfada aşağı doğru ilerleyebilirsin? ;-) – StephenKing

cevap

1

. Pratikte, bu, tarayıcılarda mevcut uygulamaların doğru bir şekilde yorumlanmasının mümkün olmadığı (örneğin, Firefox 45 için yazma sırasında başarısız); this comment tarafından özetlenmiştir.

sonra aşağıdaki nginx gelen Origin başlığını kontrol edin ve uygun tepkiyi ayarlayacaktır pasajı, ne gerek uygulamak için: gerektiği gibi

location/{ 
    if ($http_origin ~* "^https?://(website.com|www.website.com)$") { 
     add_header Access-Control-Allow-Origin "$http_origin"; 
    } 
} 

düzenli ifade içine daha fazla etki alanı ekleyin; http://'u desteklemek için s? kaldırılabilir.

Dikkat edilmesi gerekirse, SVG'leri doğrudan HTML üzerinden bir web sayfasına dahil ediyorsanız (ör. <img src="http://example.com/img.svg>), daha sonra CORS ve Access-Control-Allow-Origin gerekli değildir. Resimleriniz için crossorigin özniteliğini kullanıyorsanız (CORS Enabled Images gibi) veya JS vb. Yoluyla yükleme yapıyorsanız, yukarıdakiler gereklidir. nginx aynı ada sahip birden başlıkları eklemenin


Orijinal cevap (onlar yanlış olduğu gibi kaldırıldı CORS referanslar):

Belirli bir blokta add_header birden çok kez kullanabilirsiniz:

location/{ 
    add_header Header-Name "value"; 
    add_header Header-Name "value2"; 
} 

ve cevap içerecektir:

Header-Name: value 
Header-Name: value2 

add_header ayrıca başlıkları hatalar dahil, tüm yanıt kodları, eklenecek istiyorsanız (http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header bakınız) always parametre eklemek isteyebilirsiniz değişkenler ve not özelliği olabilir.

+0

Bu hatayı alıyorum Bunu yaptığımda: 'XMLHttpRequest, http://www.website.com/image.svg dosyasını yükleyemiyor. 'Erişim-Kontrol-İzin-Kökeni' başlığı birden fazla değer içerir 'http://www.website.com, http://website.com', ancak sadece bir tane izin verilir. Origin 'http://website.com' bu nedenle erişime izin verilmiyor. ' – Shonna

+0

@Shonna CORS tek bir başlık kullandığından amaç, çoklu başlık kullanmamak için cevabı ayarladı. – davidjb