low*_*llk 4 ruby ruby-on-rails character-encoding http-headers
在Rails应用程序中访问API时,似乎无法解析某些标头.例如,这有效:
Accept: application/json
Run Code Online (Sandbox Code Playgroud)
但这不是:
Accept: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
是否未能理解第2个标题是标题的合法问题?即使它是,我怎么能让Rails理解它,或者至少理解它是对Json的请求?
问题是,在Rails 3.2.14中,Mime :: Type.parse方法不支持在Accept头中指定charset参数; 实际上它只支持"q"参数(参见Q_SEPARATOR_REGEXP常量).
但是,在Rails 4中,该方法已更新为支持任意参数(请参阅此提交),因此升级到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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |