gpt4 book ai didi

passenger - 如何在 VHost 或 Passeneger (Ruby) 中添加响应头

转载 作者:行者123 更新时间:2023-12-03 10:04:54 26 4
gpt4 key购买 nike

我对同源策略有疑问。我想发出跨域请求 - 我找到了很好的解决方案:http://www.w3.org/TR/cors/

但我不想在 Apache 中设置 header ,因为我有很多域,只有一个需要它。是否可以通过虚拟主机或乘客添加 Access-Control-Allow-Origin header ?

我这样做,因为我需要在 Chrome/Mozilla 插件中使用 Redmine REST API (XHR)。

最佳答案

我也有类似的需求。如果您希望 Redmine 提供这些 header ,则需要修改 Redmine 源。我写了a blog post about doing this .

归功于 this blog post了解大部分细节。

为了方便起见,我将在这里重现我必须做的事情:


首先让我们来谈谈预检。为此,我在 /app/controllers/cors_controller.rb 添加了一个全新的 Controller 。看起来像:

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 中的这个 Controller :

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

进行了预检检查,这只是一个使用 /app/controllers/application_controller.rb 中的 after_filter 将 header 添加到主响应的情况,如汤姆:

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

关于passenger - 如何在 VHost 或 Passeneger (Ruby) 中添加响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com