ruby-on-rails - Rails CORS - 简单请求 : allowed methods option is ignored

标签 ruby-on-rails ruby cors

我基于 Rails 5 构建 API。我使用“rack-cors”gem 来控制 CORS。下面的代码片段我想知道:

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: %i()
      end
    end

我从允许的方法数组中删除了所有 HTTP 方法,但我仍然可以成功调用 GET、POST(禁止删除,我明白了)。如我所见,OPTIONS、GET、POST 被忽略,因为即使它是空的,我也可以使用这些方法调用服务器。正常吗?如果是这样,如何禁止例如使用 CORS 发布?

最佳答案

methods 值仅控制服务器在 Access-Control-Allow-Methods 的值中发回的方法名称。标题响应 CORS preflight OPTIONS request — 也就是说,仅针对非“简单”请求。

因此,如果您的请求具有触发预检的特征,那么浏览器才会检查 Access-Control-Allow-Methods 响应 header 的值以查看是否允许请求方法,等等只有这样,您配置的 methods 值才会生效。

否则,您的浏览器将允许任何不触发预检的跨域 GETPOST — 任何“简单”请求 — 无论 方法您配置的值。

how to forbid e.g. POST using CORS?

您不能禁止使用 CORS 的“简单”POST 请求。您只能禁止非简单的 POST 请求——那些出于某种原因触发了预检的请求。

或者,通过使用 headers 选项,您可以设置 Access-Control-Allow-Headers header 值——这将导致浏览器禁止任何非简单的预检请求,这些请求的请求 header 名称不是您使用 headers 选项指定的 header 名称。

关于ruby-on-rails - Rails CORS - 简单请求 : allowed methods option is ignored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932909/

相关文章:

ruby-on-rails - 如何创建迁移以通过某些列添加唯一约束范围

ajax - MarkLogic HTTP 服务器 : Set up CORS headers

javascript - Access-Control-Expose-Headers 不允许 JS 客户端读取 cookie

ruby-on-rails - 我如何应用 ruby​​ 内存模式来编写此代码

arrays - 在 Ruby 中按字母顺序对数组内的数组进行排序?

ruby - 如何在调用方法时传递所有局部变量

angular - 403 仅在我的机器上 - Angular 2 和 Tomcat 8.5

ruby-on-rails - activeadmin:父资源页面的模型必须与名称关联,该名称等于子资源页面的名称

javascript - [ rails ] : Google Map autocomplete not recording input

ruby-on-rails - 如何在创建工厂之前强制 FactoryGirl 创建父级?