加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 当给出charset时,Rails无法解析Accept头

发布时间:2020-12-17 02:39:15 所属栏目:百科 来源:网络整理
导读:在Rails应用程序中访问API时,似乎无法解析某些标头.例如,这有效: Accept: application/json 但这不是: Accept: application/json; charset=utf-8 是否未能理解第2个标题是标题的合法问题?即使它是,我怎么能让Rails理解它,或者至少理解它是对Json的请求?
在Rails应用程序中访问API时,似乎无法解析某些标头.例如,这有效:

Accept: application/json

但这不是:

Accept: application/json; charset=utf-8

是否未能理解第2个标题是标题的合法问题?即使它是,我怎么能让Rails理解它,或者至少理解它是对Json的请求?

解决方法

问题是,在Rails 3.2.14中,Mime::Type.parse方法不支持在Accept标头中指定charset参数;实际上它只支持“q”参数(参见 Q_SEPARATOR_REGEXP常量).

但是,在Rails 4中,该方法已更新为支持任意参数(参见this commit),因此升级到Rails 4应解决此问题.

如果你无法升级到Rails 4,我建议在一些Rack中间件中暂时破解以删除charset(这假设你实际上并不打算遵守可接受的charset):

class AcceptCharsetStripper
  def initialize(app)
    @app = app
  end

  def call(env)
    env["HTTP_ACCEPT"].gsub!(/;s*charset=S+/,"")
    @app.call(env)
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读