4

Rails アプリで API をヒットすると、特定のヘッダーが解析されていないようです。たとえば、これは機能します:

Accept: application/json

しかし、これはしません:

Accept: application/json; charset=utf-8

この 2 番目のヘッダーを理解できないのは、ヘッダーの正当な問題ですか? そうだとしても、Railsにそれを理解させるにはどうすればよいですか、少なくともJsonへのリクエストであることを理解させるにはどうすればよいですか?

4

1 に答える 1

5

問題は、Rails 3.2.14 では、Mime::Type.parseメソッドが Accept ヘッダーでの charset パラメーターの指定をサポートしていないことです。実際には、「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
于 2013-09-22T21:50:14.983 に答える