Railsでヘッダーにアクセスする方法は知っています
request.headers["HEADER_NAME"]
しかし、ブラウザから渡されるすべてのヘッダーを取得したいのですが、列挙できることがわかりました
request.headers.each { |header| ... }
ただし、これにより、ヘッダーとその他の環境変数の両方が吐き出されます。ヘッダーのみを取得する方法はありますか?
アップデート1
私の問題は反復ではありません。私の問題は、環境変数とヘッダーを区別することです。それぞれまたはキーを使用して反復すると、両方が報告されます。
ベストアンサー1
解決
慣例により、ヘッダーには通常ドットは含まれません。Nginxでも拒否されたデフォルトでは、ヘッダーにドットが含まれるリクエストです。したがって、これを採用するのはかなり安全な仮定だと思います。
逆に、すべての Rails 環境のゴミは名前空間化されます (例:など) action_dispatch.show_exceptions
。rack.input
これら 2 つの事実は、外部ヘッダーと内部変数を区別する方法を便利に示唆しています。
request.headers.env.reject { |key| key.to_s.include?('.') }
きちんと動作します。
ベンチマークを少し
このinclude?('.')
実装はマッチングよりも約4倍高速に動作することに注意してください=~ /\./
Benchmark.measure { 500000.times { hsh.reject { |key| key.to_s =~ /\./ } } }
=> real=2.09
Benchmark.measure { 500000.times { hsh.reject { |key| key.to_s.include?('.') } } }
=> real=0.58
お役に立てれば幸いです。