Railsリクエストのヘッダーのみを出力する 質問する

Railsリクエストのヘッダーのみを出力する 質問する

Railsでヘッダーにアクセスする方法は知っています

request.headers["HEADER_NAME"]

しかし、ブラウザから渡されるすべてのヘッダーを取得したいのですが、列挙できることがわかりました

request.headers.each { |header| ... }

ただし、これにより、ヘッダーとその他の環境変数の両方が吐き出されます。ヘッダーのみを取得する方法はありますか?

アップデート1

私の問題は反復ではありません。私の問題は、環境変数とヘッダーを区別することです。それぞれまたはキーを使用して反復すると、両方が報告されます。

ベストアンサー1

解決

慣例により、ヘッダーには通常ドットは含まれません。Nginxでも拒否されたデフォルトでは、ヘッダーにドットが含まれるリクエストです。したがって、これを採用するのはかなり安全な仮定だと思います。

逆に、すべての Rails 環境のゴミは名前空間化されます (例:など) action_dispatch.show_exceptionsrack.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

お役に立てれば幸いです。

おすすめ記事