在 Rails 应用程序中访问 API 时,似乎某些标头无法解析。例如,这有效:
Accept: application/json
但这不会:
Accept: application/json; charset=utf-8
无法理解第二个标题是否是标题的合法问题?即使是这样,我怎样才能让 Rails 理解它,或者至少理解它是对 Json 的请求?
在 Rails 应用程序中访问 API 时,似乎某些标头无法解析。例如,这有效:
Accept: application/json
但这不会:
Accept: application/json; charset=utf-8
无法理解第二个标题是否是标题的合法问题?即使是这样,我怎样才能让 Rails 理解它,或者至少理解它是对 Json 的请求?
问题在于,在 Rails 3.2.14 中,Mime::Type.parse方法不支持在 Accept 标头中指定字符集参数;实际上它只支持“q”参数(参见Q_SEPARATOR_REGEXP常量)。
然而,在 Rails 4 中,该方法已更新为支持任意参数(请参阅此提交),因此升级到 Rails 4 应该可以解决此问题。
如果您无法升级到 Rails 4,我建议您在一些 Rack 中间件中进行临时破解以去除字符集(这假设您实际上并不打算使用可接受的字符集):
class AcceptCharsetStripper
def initialize(app)
@app = app
end
def call(env)
env["HTTP_ACCEPT"].gsub!(/;\s*charset=\S+/, "")
@app.call(env)
end
end