2011-08-10 21 views
18

Access-Control-Allow-Origin hakkında okudum çünkü dış siteye erişebildiğim için etki alanı isteklerine izin vermekte etkili görünüyor. Soruma sorum, etki alanı isteklerine izin vermek için Access-Control-Allow-Origin'u nasıl kullanırım? Bunu (gülme) (tek istediğim tek bir numara içindir arada, 1 veya 0 döndürülecek) Erişim Denetimi-İzin-Kökeni'ni nasıl kullanırım? Sadece html kafa etiketleri arasında mı gidiyor?

<html> 
<head> 
Access-Control-Allow-Origin: * 
</head> 
<body> 
1 
</body> 
</html> 

ben kapatmak mıyım çalıştı? Yardım ettiğin için teşekkür ederim. Alanlar arası basit bir istek yapmak için daha kolay bir yol varsa, bana bildirin.

cevap

8

Bu bir HTTP başlığıdır. Web sunucunuzu veya webapp'inizi bu başlığı ideal olarak göndermek için yapılandırırsınız. Belki htaccess veya PHP'de.

Alternatif Bunun işe olsaydı bilmiyorum

<head>...<meta http-equiv="Access-Control-Allow-Origin" content="*">...</head> 

kullanmak mümkün olabilir. Tüm HTTP üstbilgileri doğrudan HTML'de yapılandırılamaz.

Bu, birçok HTTP üst bilgisine alternatif olarak çalışır, ancak aşağıdaki @EricLaw adlı kullanıcının yorumuna bakın. Bu başlık farklıdır.

Caveat

Bu cevap başlıklarını nasıl ayarlanacağı hakkında kesinlikle yasaktır. Web alanları arası isteklere izin verme konusunda hiçbir şey bilmiyorum. HTTP Headers Hakkında

Her istek ve yanıt başlıkları bulunması. tarayıcı Sonra sunucu

Content-type: text/html 
Content-length: (number of bytes in file (optional)) 
Date: (server clock) 
Server: (Webserver name and version information) 

Ek başlıkları örnek Cache-Control için yapılandırılabilir bir yanıt gönderir

Host: www.example.com 
User-Agent: (Browser/OS name and version information) 
.. Additional headers indicating supported compression types and content types and other info 

başlıklarını Sonra web sunucusu

GET /index.htm HTTP/1.1 

bu gönderir, tüm bağlıdır senin dilin (PHP, CGI, Java, htaccess) ve web sunucusu (Apache, vb).

1) doğrudan PHP gibi bir çiftleşmiş dili kullanarak sayfasında başlığını ayarlayın:

+6

'u kullanarak sınırsız CORS'e izin verin * HTTP üstbilgisinde * olması gerekir *. Vücuda onu desteklemek bir güvenlik hatasıdır. – EricLaw

+0

Bahsettiğinize sevindim. Bu çapraz etki alanı öğelerinin nasıl çalıştığını bilmiyorum. Cevabımı düzenleyeceğim. –

+0

Cevabınız için teşekkürler. Şimdi sadece http başlıklarını değiştirmeme izin veren bir web barındırma bulmaya çalışıyorum. – davis

15

(jsonp hariç) alanları arası kökeni izin için 3 yol vardır. Başlığınızdan önce HTML bulunamayacağını veya başarısız olacağını unutmayın.

<?php header("Access-Control-Allow-Origin: http://example.com"); ?> 

2) sunucu yapılandırma dosyası (apache.conf) değiştirin ve bu satırı ekleyin. "*"'un hepsine izin verdiğine dikkat edin. Bazı sistemler de kimlik kümesine ihtiyaç duyabilir.Genelde tüm erişim bir güvenlik riski oluşturuyor ve kaçınılmalıdır izin:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Credentials true 

3) Apache web sunucularında birden çok etki sağlamak için geliştirme kullanım için lütfen yapılandırma dosyasında

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(example.org|example.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

4) için aşağıdaki ekleyin sadece tarayıcınızı hackleyin ve Chrome Allow-Control-Allow-Origin extension

+0

Yerel geliştirme için en kolay yol, yalnızca korseler uzantısını eklemektir – kelevra88

+13

Yanlışlıkla testte çalışan ancak üretimde gizemli bir şekilde başarısız olan kodları oluşturmanın en kolay yolu uzantıyı eklemektir. ;) – dannysauer

+0

Bu uzantıyı nasıl kullanacağınıza dair bir örnek verebilir misiniz? İşe yaramadım ve herhangi bir doküman görünmüyor. Uzak adresi "Engellenen URL'ler veya URL kalıpları" ayarında oluşturmama rağmen, CORS nedeniyle erişimin engellendiğini açıklayan Dev Tools aracılığıyla iletileri görmeye devam ediyorum. Ve bir "Erişim-Kontrol-Poz-Başlıkları" ayarı var, ne için olduğunu bilmiyorum. Benim hatam mı, yoksa uzantılar çalışmıyorsa bilmiyorum. – Pere