2012-08-27 13 views
12

İki alt etki alanı arasında çalışan bazı AJAX almaya çalışıyorum. apache olarakCORS etkin, ancak AJAX çalışmıyor (krom menşe izin verilmiyor diyor)

rails.mydomain.com ve mydomain.com

,/etc/apache2/sites-available/Benim rails.mydomain.com dosyası var içinde: Ancak

<VirtualHost *:80> 
    Header add Access-Control-Allow-Origin "http://www.mydomain.com" 
    Header add Access-Control-Allow-Origin "http://www.dev-mydomain.com" 
</VirtualHost> 

, her http://www.dev-mydomain.com'dan itibaren basit bir ajax test isteği yapmaya çalışıyorum: "XMLHttpRequest, http://rails.mydomain.com/directory yüklenemiyor. Origin http://www.dev-mydomain.com, Access-Control-Allow-Origin tarafından izin verilmiyor."

Neyi kaçırdığımı bilen var mı?

+1

Kontrol dışarı [Erişim-C ontrol-İzin-Menşei çoklu menşe alanları] (http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains) –

+1

Tamam, bu yüzden daha önce bu gönderiyi izledim, ama takip ettim İki "Üstbilgi ekle" ifadeleri hakkında yanıt. İkinci add deyimini kaldırdım ve sadece bir Header setim var ve işe yarıyor, ancak sonunda iki kökenden gelmem gerekiyor ... sadece iki set deyim yapmalı mıyım yoksa o posttan hangi çözüm en iyi yöntem –

+0

yup , Birden fazla ayar ile craps. google'ın bu en kısa zamanda düzeltmesi gerekiyor. İlk etapta ajax icat etmediler mi? –

cevap

0

ben çapraz kökenli ajax yaparken

2

bu lütfen deneyebilir misiniz ekleyebilir ... oldukça basit, bazı başarının rack-cors kullandık?

/application.rb

config.middleware.use Rack::Cors do |requests| 
    requests.allow do |allow| 
    allow.origins '*' 
    allow.resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options] 
    end 
end 

yeniden başlatma sunucu unutma yapılandırma için

gem "rack-cors", "~> 0.2.7" 

Gemfile belirleyin. O zaman işe yaramalı.

+1

Bu, sunucuyu daha az güvenli hale getirmiyor mu? – mindmyweb

3

Dahazer'in bağlantısının işaret ettiği gibi, en iyi bahis tek bir Access-Control-Allow-Origin başlığıdır. Üretim için kesinlikle uygun değil, ancak dev modda iken Origin başlığını tekrar yazabilirsiniz.

Hala bir sorununuz varsa, yanıtta yeterince CORS başlığı ayarlamamanız olasıdır. (Jquery zihin kullanmıyor), krom alanları arası ajax yapmanın Benim durumumda, ben de şu başlığı ayarlamak için gerekli ettik: Ben POST dışındaki HTTP yöntemlerini kullanarak ve aynı zamanda oldu GET oldu Verilen

Access-Control-Allow-Headers : X-Requested-With,Content-Type 

beni Ancak

Access-Control-Allow-Methods : GET,PUT,POST,DELETE 

ayarlamak için gerekli her şeyden ben html5 CORS öğretici, özellikle CORS on the server bölümünü okumanızı öneririz. Size özel kullanım durumunuza göre, sunucuda veya istemcide (örneğin, jquery'nin ajax yapılandırma seçeneklerinde) CORS'i yapılandırmanın farklı yolları hakkında iyi bir fikir vermelisiniz.

2

Son zamanlarda bu sorunu yaşadım. Apache'de Access-Control-Allow-Origin'u *'a ayarlamıştım. Bununla birlikte, Firefox’ta iyi çalıştıysa da Chrome, alanlar arası isteklerimi hala engelliyordu.

Benim için çalışan çözüm, Access-Control-Allow-Methods başlık değerini OPTIONS, GET, POST değerine eklemekti. Burada yayınlamak, gelecekte herkesin aynı sorunu olması durumunda ve diğer çözümlerin hiçbiri işe yaramıyorsa.

0

Problem burada 4 farklı yerde olabilir. <virthualhost tanımınızla başlayalım. Öncelikle, vhost tanımınızın bu ayarları gerçekleştirmesine bile izin vermeniz gereken birkaç modül ve yapılandırma ayarı vardır.

  • mod_headers olun
  • birincil apache yapılandırma dosyası olun etkinleştirildiğinde yapabilirsiniz, onlardan ikisi yaptıktan sonra sizin sankonlar varsayılan CORS

ayarları geçersiz kılmak için izin veren bir AllowOverride ayarı vardır ayrıca bir DocumentRoot direktifini kullanmaları şartıyla, Access-Control-Allow-Origin ayarı kullanmak

<VirtualHost *:80> 
    DocumentRoot /server/path/to/site/root 
    Header add Access-Control-Allow-Origin "mydomain.com" 
    Header add Access-Control-Allow-Origin "dev-mydomain.com" 
    Header set Access-Control-Allow-Methods "GET,POST,PUT,OPTIONS" 
</VirtualHost> 
İlgili konular