我基于 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
值才会生效。
否则,您的浏览器将允许任何不触发预检的跨域 GET
和 POST
— 任何“简单”请求 — 无论 方法
您配置的值。
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/