通过CORS政策允许任何事情

我怎样才能禁用Cors? 出于某种原因,我狂放梳理允许的来源和标题,但我的阿贾克斯请求仍然抱怨,我的CORS政策不允许的起源….

我的应用控制器:

class ApplicationController < ActionController::Base protect_from_forgery before_filter :current_user, :cors_preflight_check after_filter :cors_set_access_control_headers # 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-Methods'] = 'POST, GET, OPTIONS' headers['Access-Control-Allow-Headers'] = '*' headers['Access-Control-Max-Age'] = "1728000" end # If this is a preflight OPTIONS request, then short-circuit the # request, return only the necessary headers and return an empty # text/plain. def cors_preflight_check if request.method == :options headers['Access-Control-Allow-Origin'] = '*' headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' headers['Access-Control-Allow-Headers'] = '*' headers['Access-Control-Max-Age'] = '1728000' render :text => '', :content_type => 'text/plain' end end private # get the user currently logged in def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end helper_method :current_user end 

路线:

  match "*all" => "application#cors_preflight_check", :constraints => { :method => "OPTIONS" } match "/alert" => "alerts#create" match "/alerts" => "alerts#get" match "/login" => "sessions#create" match "/logout" => "sessions#destroy" match "/register" => "users#create" 

编辑 – –

我也试过:

  config.middleware.use Rack::Cors do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :post, :delete, :put, :options] end end 

在application.rb中

– 编辑2 —

问题是Chrome扩展可能不支持我认为的CORS。 我如何获取绕过CORS的信息? 我应该如何回应预检检查?

我对你使用rails-api的公共API有相同的要求。

我也在filter中设置标题。 它看起来像这样:

 headers['Access-Control-Allow-Origin'] = '*' headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS' headers['Access-Control-Request-Method'] = '*' headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization' 

看起来你错过了访问控制请求方法头。

看看机架中间件。 它将以可configuration的方式处理CORS头文件。

我曾经遇到类似的问题,事实certificate,在这个问题上,networking浏览器(我的情况是Chrome)

如果您使用的是chrome,请尝试启动它:

对于Windows:

1)在桌面上创build一个Chrome的快捷方式。 右键单击快捷方式并select“属性”,然后切换到“快捷方式”选项卡。

2)在“目标”字段中,附加以下内容:-args -disable-web-security

对于Mac,打开一个terminal窗口并从命令行运行:open〜/ Applications / Google \ Chrome.app / -args -disable-web-security

以上信息来自:

http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/

我遇到了问题,尤其是在Chrome上。 你所做的基本上和我在应用程序中所做的一样。 唯一的区别是,我在Origin CORS头文件中使用了正确的主机名,而不是通配符。 在我看来,铬是挑剔的。

在开发和生产之间切换是一个痛苦,所以我写了这个小函数,这有助于我在开发模式和生产模式。 以下所有的事情都发生在我的application_controller.rb除非另有说明,它可能不是最好的解决scheme,但是rack-cors也不适合我,我不记得为什么。

 def add_cors_headers origin = request.headers["Origin"] unless (not origin.nil?) and (origin == "http://localhost" or origin.starts_with? "http://localhost:") origin = "https://your.production-site.org" end headers['Access-Control-Allow-Origin'] = origin headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT, DELETE' allow_headers = request.headers["Access-Control-Request-Headers"] if allow_headers.nil? #shouldn't happen, but better be safe allow_headers = 'Origin, Authorization, Accept, Content-Type' end headers['Access-Control-Allow-Headers'] = allow_headers headers['Access-Control-Allow-Credentials'] = 'true' headers['Access-Control-Max-Age'] = '1728000' end 

然后我在我的application_controller.rb有这个小东西,因为我的站点需要login:

 before_filter :add_cors_headers before_filter {authenticate_user! unless request.method == "OPTIONS"} 

在我的routes.rb我也有这个东西:

 match '*path', :controller => 'application', :action => 'empty', :constraints => {:method => "OPTIONS"} 

这个方法看起来像这样:

 def empty render :nothing => true end 

只要你可以添加机架gemhttps://rubygems.org/gems/rack-cors/versions/0.4.0

第一步:将gem添加到您的Gemfile中:

 gem 'rack-cors', :require => 'rack/cors' 

然后保存并运行bundle install

第二步:通过添加这个来更新你的config / application.rb文件:

 config.middleware.insert_before 0, Rack::Cors do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :post, :options] end end 

更多的细节你可以去https://github.com/cyu/rack-cors特别是如果你不使用rails 5。

尝试/config/application.rbconfiguration:

 config.middleware.insert_before 0, "Rack::Cors" do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :post, :options, :delete, :put, :patch], credentials: true end end 

这也支持大多数PHP框架

 Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Credentials true Header set Access-Control-Allow-Headers "accept, content-type, X-Requested-With, X-Prototype-Version, X-CSRF-Token, authorization" 

只要确保你评论… Origind行在httpd.conf文件中

 # Virtual hosts #Header always set Access-Control-Allow-Origin "*" Include /private/etc/apache2/extra/httpd-vhosts.conf 

或者你最终会有多个来源“*,*”的问题

Interesting Posts