12

2 つのサブドメイン間で AJAX を機能させようとしています。

rails.mydomain.com と mydomain.com

Apache では、/etc/apache2/sites-available/ に rails.mydomain.com ファイルがあります。

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

ただし、 http://www.dev-mydomain.comから単純ajax テスト リクエストを実行しようとすると、Chrome で次のように表示されます/www.dev-mydomain.comは Access-Control-Allow-Origin で許可されていません。"

私が欠けているものを知っている人はいますか?

4

5 に答える 5

3

Dahazer のリンクが指摘しているように、最善の策は単一の Access-Control-Allow-Origin ヘッダーを設定することです。本番環境には絶対に適していませんが、開発Originモードでヘッダーをエコーバックすることはできます。

それでも問題が解決しない場合は、応答に十分な CORS ヘッダーを設定していない可能性があります。Chrome でクロスドメイン ajax を実行した私の経験では (jquery mind を使用していません)、次のヘッダーも設定する必要がありました。

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

POST と GET 以外の HTTP メソッドを使用していた場合、設定する必要もありました。

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

ただし、何よりも、html5 CORS チュートリアル、特にCORS on the serverセクションを読むことをお勧めします。特定のユース ケースに基づいて、CORS をサーバー上またはクライアント上 (この場合は jquery の ajax 構成オプション) で構成するさまざまな方法についての良いアイデアが得られるはずです。

于 2012-12-25T11:03:31.063 に答える
2

これを試していただけませんか?

Gemfileへ

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

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

サーバーの再起動を忘れないでください。その後、それは動作するはずです。

于 2012-12-24T23:16:44.760 に答える
2

最近この問題が発生しました。私はApacheに設定Access-Control-Allow-Originしていました。*ただし、Firefox では正常に機能していましたが、Chrome は依然としてクロスドメイン リクエストをブロックしていました。

私にとってうまくいった解決策は、Access-Control-Allow-Methodsヘッダーに valueを追加することでしたOPTIONS, GET, POST。将来誰かが同じ問題を抱え、他の解決策が機能しない場合に備えて、これをここに投稿してください。

于 2012-12-26T13:00:35.997 に答える
0

私はラックコアを使用して成功を収めましたが、クロスオリジンajaxを実行するときに追加するのは非常に簡単です...

于 2012-09-10T12:02:59.913 に答える
0

問題は、ここの 4 つの異なる場所にある可能性があります。<virthualhostあなたの定義から始めましょう。まず、仮想ホスト定義がこれらの設定を実装できるようにするために必要なモジュールと構成設定がいくつかあります。

  • mod_headers有効になっていることを確認します
  • プライマリ Apache 構成ファイルに、AllowOverride仮想ホストがデフォルトの CORS 設定を上書きできる設定があることを確認してください

これらの両方を行った後、ディレクティブAccess-Control-Allow-Originも使用する場合は、設定を使用できますDocumentRoot

<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>
于 2014-02-22T19:14:48.623 に答える