はい、異なるポートへの要求はドメイン間の要求です。ブラウザはプリフライトOPTIONSリクエスト(CORS)を行っており、回答を得ていません。その後、元の要求を破棄します。このOPTIONS要求に対して、適切なCORSヘッダーでサーバーに応答させる必要があります。ブラウザは、その後、その信号を要求する。
ここはmore information on CORSです。
class V1::ApplicationController < ApplicationController
after_filter :cors_set_access_control_headers, :log_user
# respond to options requests with blank text/plain as per spec
def cors_preflight_check
logger.info ">>> responding to CORS request"
render :text => '', :content_type => 'text/plain'
end
# For all responses in this controller, return the CORS access control headers.
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Headers'] = 'X-AUTH-TOKEN, X-API-VERSION, X-Requested-With, Content-Type, Accept, Origin'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS'
headers['Access-Control-Max-Age'] = "1728000"
end
とルートから:ここで
は自分のアプリケーションのコントローラからのコードです。RB:
match '/*path' => 'application#cors_preflight_check', :via => :options
これを扱うことができ、ラックのプラグインもあります:rack-cors
私は 'rack-cors'を使用していますが、リクエストを実行しているときに、私のレールサーバに何も表示されません。クロスドメインリクエストはRailsサーバに表示された後、拒否されますか、またはAJAXは送信前にそれらを先に拒否しますか? – darksky
'AJAX'がクロスドメインリクエストをブロックしてから送信する場合の' cors'のポイントは何ですか? – darksky
AJAXはクロスドメインリクエストのためのフライト前のOPTIONSリクエストを常に送信します。一部のブラウザデバッグツールではこれを表示していません。 rak-corsを動作させることができなかったので、OPTIONSリクエストを自分で処理しました。 – buuda