同様の要件がありました。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_filter
inを使用してヘッダーをメイン レスポンスに追加する場合にすぎません。/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