2012-08-27 14 views
12

Ich versuche, einige AJAX arbeiten zwischen zwei Sub-Domains zu bekommen.CORS in Apache aktiviert, aber AJAX funktioniert nicht (Chrome sagt Herkunft nicht erlaubt)

rails.mydomain.com und mydomain.com

in Apache, in/etc/apache2/sites-available/Ich habe meine rails.mydomain.com Datei:

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

Jedes Mal, wenn Ich versuche, eine einfache Ajax-Test-Anfrage von http://www.dev-mydomain.com, in Chrome bekomme ich: "XMLHttpRequest kann nicht geladen werden http://rails.mydomain.com/directory. Origin http://www.dev-mydomain.com ist nicht erlaubt von Access-Control-Allow-Origin."

Wer weiß, was ich vermisse?

+1

Check out [Zugriffs-C eine DocumentRoot-Direktive astrol-Allow-Origin mehrere Herkunftsdomänen] (http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains) –

+1

Ok, also habe ich das Posting vorher gesehen, aber ich folgte die Antwort über zwei "Header add" -Anweisungen. Ich habe die zweite add-Anweisung entfernt, und habe nur einen Header gesetzt und es funktioniert, aber ich werde schließlich zwei Ursprünge haben ... sollte ich nur zwei Satz-Anweisungen, oder welche Lösung von diesem Beitrag ist die beste Methode –

+0

yup , es kommt mit mehr als einer Einstellung aus. Google muss das so schnell wie möglich beheben. Haben sie nicht überhaupt Ajax erfunden? –

Antwort

0

Ich habe rack-cors zu einem gewissen Erfolg, ziemlich einfach hinzuzufügen, wenn tun Quer Herkunft Ajax ...

2

Könnten Sie das bitte versuchen Sie es verwendet?

Um

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

Um config/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 

Gemfile nicht den Neustart Server Vergessen Sie. Dann sollte es funktionieren.

+1

Wird dadurch der Server weniger unsicher? – mindmyweb

3

Wie Dahazers Link darauf hinweist, ist die beste Wette ein einzelner Access-Control-Allow-Origin-Header. Es ist definitiv nicht für die Produktion geeignet, aber du könntest einfach den Origin Header zurückgeben, während du dich im Dev-Modus befindest.

Wenn Sie immer noch ein Problem haben, ist es wahrscheinlich, dass Sie nicht genug CORS-Header in der Antwort einstellen. Nach meiner Erfahrung zu tun Cross-Domain Ajax in Chrom, (nicht jquery Geist verwendet wird), habe ich auch, um die folgenden Header benötigt:

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

Da ich anders als POST HTTP-Methoden wurde mit und GET war es auch notwendig für mich

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

jedoch vor allem einstellen würde ich empfehlen, die html5 CORS-Tutorial zu lesen, insbesondere den CORS on the server Abschnitt. Es sollte Ihnen eine gute Vorstellung von den verschiedenen Möglichkeiten geben, CORS zu konfigurieren, sei es auf dem Server oder dem Client (in Ihrem Fall die AJAX-Konfigurationsoptionen von jquery), basierend auf Ihrem spezifischen Anwendungsfall.

2

Ich hatte dieses Problem vor kurzem. Ich hatte Access-Control-Allow-Origin zu * in Apache gesetzt. Allerdings blockierte Chrome immer noch meine domainübergreifenden Anfragen, während es in Firefox problemlos funktionierte.

Die Lösung, die für mich arbeitete, war eine Access-Control-Allow-Methods Header mit Wert OPTIONS, GET, POST hinzuzufügen. Dies hier zu veröffentlichen, falls jemand das gleiche Problem in der Zukunft hat und keine der anderen Lösungen funktioniert.

0

Das Problem könnte hier an 4 verschiedenen Orten sein. Beginnen wir mit Ihrer <virthualhost Definition. Zuerst müssen Sie einige Module und Konfigurationseinstellungen haben, damit Ihre vhost-Definition diese Einstellungen auch implementieren kann.

  • mod_headers Stellen Sie sicher, aktiviert
  • Stellen Sie sicher, Ihre primäre Apache-Konfigurationsdatei hat eine AllowOverride Einstellung, die Ihre vhosts ermöglicht Ihre Standard-CORS-Einstellungen

außer Kraft zu setzen, nachdem Sie diese beiden getan haben, können Sie verwenden Sie die Access-Control-Allow-Origin Einstellung, vorausgesetzt, dass Sie auch

<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> 
Verwandte Themen