これはSpinejsのドキュメントからのものです
CORsRailsの統合
リクエストの応答にリクエストアクセス制御ヘッダーの一部を追加するcorメソッドを作成しましょう。
app/application_controller.rbに以下を追加します。
before_filter :cor
def cor
headers["Access-Control-Allow-Origin"] = "js-app-origin.com"
headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE}.join(",")
headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",")
head(:ok) if request.request_method == "OPTIONS"
end
Access-Control-Allow-Originはワイルドカードを使用しますが、アプリをあらゆる種類のCSRF攻撃にさらす可能性があるため、使用しないことを強くお勧めします。ホワイトリストを使用する方がはるかに優れており、より安全です。
Access-Control-Allow-Headersセクション、特にX-Requested-Withヘッダーは重要です。Railsは、このヘッダーなしでAjaxリクエストを送信すると、それを嫌い、リクエストのAcceptヘッダーを無視して、実際にはJSONを返す必要があるときにHTMLを返します。
jQueryは、デフォルトではクロスドメインリクエストにこのヘッダーを追加しないことに注意してください。これはSpineが内部で解決する問題ですが、CORにプレーンなjQueryを使用している場合は、ヘッダーを手動で指定する必要があります。
jQuery.ajaxSetup({
headers: {"X-Requested-With": "XMLHttpRequest"}
});
一部のブラウザは、正しいアクセスヘッダーが設定されていることを確認するために、最初にオプション要求をサーバーに送信します。Railsでこれをキャッチし、正しいヘッダーで200ステータスを返す必要があります。これを行うには、アプリケーションのconfig/routes.rbファイルに以下を追加します。
match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
これで、Spineを使用したクロスオリジンリクエストの準備が整いました。