ruby-on-rails – 单个Rails路由上的Access-Control-Allow-Origi
发布时间:2020-12-17 03:10:31 所属栏目:百科 来源:网络整理
导读:在我的Rails应用程序中,我正在构建一个功能,允许用户使用 Javascript代码段从其他网站上的应用程序嵌入数据. 我的Javascript片段向我的rails应用程序中的路由发出GET请求,该路由返回原始JSON.当片段和JSON共享同一个域时,一切运行良好,但是当我将片段嵌入到
在我的Rails应用程序中,我正在构建一个功能,允许用户使用
Javascript代码段从其他网站上的应用程序嵌入数据.
我的Javascript片段向我的rails应用程序中的路由发出GET请求,该路由返回原始JSON.当片段和JSON共享同一个域时,一切运行良好,但是当我将片段嵌入到另一个站点时,我遇到了CORS问题. 使用解决方案I found here,我开始为CORS配置我的Rails应用程序. 在我的application_controller.rb中: before_filter :add_allow_credentials_headers def add_allow_credentials_headers response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*' response.headers['Access-Control-Allow-Credentials'] = 'true' end def options head :status => 200,:'Access-Control-Allow-Headers' => 'accept,content-type' end 在我的routes.rb中: get 'embed_json' => 'application#options',:via => [:options] 但是,当我在浏览器中点击上述路径时,应用程序不再返回JSON对象 – 只是一个空白屏幕. 关于如何在单个Rails路由上最好地处理CORS似乎存在许多相互矛盾的方法.有没有“Rails方式”来处理这个要求? 解决方法
对头部的调用将不会返回JSON
by definition.当您使用head调用它时,选项哈希将被转换为标题.
可能会尝试这个,一个选项调用将根据需要提供一个空响应主体的标题.对index的调用应该呈现JSON以及您在add_allow_credentials_headers过滤器中设置的标头. def add_allow_credentials_headers response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*' response.headers['Access-Control-Allow-Credentials'] = 'true' response.headers['Access-Control-Allow-Headers'] = 'accept,content-type' end def options head :ok end def index # do something here that renders a JSON response end 另外,在rails应用程序上启用CORS的另一个选项是rack-cors,可以做你需要的而不用自己做的麻烦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |