3

同一オリジン ポリシーに問題があります。クロスドメインリクエストを作成したい - 良い解決策を見つけた: http://www.w3.org/TR/cors/

しかし、多くのドメインがあり、必要なのは1つだけなので、Apacheにヘッダーを設定したくありません。Virtual Host または Passenger を介してAccess-Control-Allow-Originヘッダーを追加することは可能ですか?

Chrome/Mozilla プラグインで Redmine REST API (XHR) を使用する必要があるためです。

4

1 に答える 1

0

同様の要件がありました。Redmine にこれらのヘッダーを提供させたい場合は、Redmine ソースを変更する必要があります。これについてのブログ投稿を書きました。

ほとんどの詳細については、このブログ投稿の功績を認めてください。

便宜上、ここでしなければならなかったことを再現します。


まず、プリフライト チェックに対処しましょう。このためだけに、まったく新しいコントローラーを に追加しました/app/controllers/cors_controller.rb。次のようになります。

class CorsController < ApplicationController

    skip_before_filter :session_expiration, :user_setup, :check_if_login_required, :set_localization

    def preflight
            headers['Access-Control-Allow-Origin'] = '*'
            headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT'
            headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version, Content-Type'
            headers['Access-Control-Max-Age'] = '1728000'
            render :text => '', :content_type => 'text/plain'
    end

end

かなり単純なもの。OPTIONS次に、すべてのリクエストをこのコントローラーにルーティングしました/config/routes.rb

match '*path', :to => 'cors#preflight', :constraints => {:method => 'OPTIONS'}

プリフライト チェックが処理されます。これは、Tom が提案したafter_filterinを使用してヘッダーをメイン レスポンスに追加する場合にすぎません。/app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  include Redmine::I18n
  # ...
  before_filter :session_expiration, :user_setup, :check_if_login_required, :set_localization

  #************ Begin Added Code ****************
  after_filter :cors_set_access_control_headers

  # For all responses in this application, return the CORS access control headers.

  def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT'
    headers['Access-Control-Max-Age'] = "1728000"
  end
  #************* End Added Code *****************
  #...
end
于 2013-01-13T10:49:25.377 に答える