rack-cors gem 和设置 Access-Control-Allow-Origin Header
Posted
技术标签:
【中文标题】rack-cors gem 和设置 Access-Control-Allow-Origin Header【英文标题】:rack-cors gem and setting Access-Control-Allow-Origin Header 【发布时间】:2014-11-01 17:55:19 【问题描述】:在使用 rack-cors gem 时,有没有办法设置“Access-Control-Allow-Origin”标头值?
我们正在使用 rack-cors gem https://github.com/cyu/rack-cors 来管理 Grape 应用程序的 CORS。
我想发回一个永久重定向并将它们从当前子域重定向到另一个子域。葡萄代码是:
redirect 'subdomain2.oursite.com, 'Access-Control-Allow-Origin' => '*',permanent: true
但这不起作用,因为 rack-cors 会使用请求进入的当前 URL 覆盖 Access-Control-Allow-Origin 标头值,这会导致 CORS 预检错误。
所以需要一种方法来设置值。
【问题讨论】:
【参考方案1】:我的 API 遇到了类似的问题,在这里偶然发现了这个问题。虽然没有提供有效的解决方案,但我设法找到了一个适合我的解决方案。
class Api::BaseController < ActionController::API
respond_to :json
before_filter :set_cors_header
after_filter :cors_set_access_control_headers
def cors_set_access_control_headers
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'
end
def set_cors_header
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-Typee, Accept, Authorization'
end
end
【讨论】:
以上是关于rack-cors gem 和设置 Access-Control-Allow-Origin Header的主要内容,如果未能解决你的问题,请参考以下文章
CORS 问题:实际出现错误“不存在‘Access-Control-Allow-Origin’标头”
Rack-cors 未在 swagger-ui_rails 的生产环境中显示标题
使用omniauth-twitter / twitter Gem读取Twitter REST API的x-access-Level标头