Sinatraとかでいつも忘れるのでメモ
Rack::Requestのenvの仕様は以下のような感じになる
- RackのEnvironmentによるとHTTP_で始まる値がHTTPリクエストヘッダ
- 形式としてはRFC 3875 - The Common Gateway Interface (CGI) Version 1.1に準拠している
- HTTP ヘッダフィールド名が大文字に変換され、存在する全ての
-
が_
に置換され、先頭にHTTP_
が与えられる
なので、以下のような感じでダンプ出来る(人間がわかれば良ければ1行目をpするだけでも良さそう)
http_headers = request.env.select { |k, v| k.start_with?('HTTP_') }
headers = http_headers.inject({}) do |a, (k, v)|
a[k.sub(/^HTTP_/, "").downcase.gsub(/(^|_)\w/) { |word| word.upcase }.gsub("_", "-") ] = v
a
end
puts headers.to_a.map { |v| v.join(": ") }.join("\n")