📅  最后修改于: 2023-12-03 14:46:54.006000             🧑  作者: Mango
跨域资源共享(CORS)是一种机制,允许网页从不同的域访问另一个域中的资源。默认情况下,浏览器会阻止跨域请求,CORS机制可以让服务器告诉浏览器哪些跨域请求是可以接受的。
Ruby on Rails框架提供了一个简单的gem包,用于设置CORS规则,它是CORS协议的一个中间件。
在Gemfile中添加:
gem 'rack-cors'
然后执行:
bundle install
### application.rb
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
end
end
这个配置允许所有域名的请求,通过插入Rack::Cors中间件来实现。
- allow: 用于配置访问权限规则
- origins: 可以是一个字符串或者一个正则表达式,表示来自哪些域名的请求是允许的。
- resource: 资源规则,指定了哪些路由、请求方法、请求头可以被跨域访问。
- headers: 允许跨域请求时,对于浏览器的跨域请求,服务器端需要返回的headers。
- methods: 声明服务端支持的HTTP方法。
### application.rb
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'example.com', 'www.example.com'
resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
end
end
这个配置允许example.com
和www.example.com
两个域名的请求。
默认情况下,浏览器不会把cookie发给跨域的服务器,如果需要携带cookie,需要将with_credentials参数设置为true。
### application.rb
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options],
credentials: true
end
end
将上面的配置加入Rails的配置文件。
### config/environments/production.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
end
end
以上是使用Rails CORS允许所有资源访问的介绍。使用Rack::Cors中间件是一个简单而又方便的方法,让我们可以授权对我们的API进行跨域访问。具体的配置可以根据实际需求进行调整。