やったこと
Rails で http ヘッダーリクエストについて調査をしていて、ハマった時の話しです。
http ヘッダーリクエストのキーが Rails 側で変更されていることにより、ハマりました。
キーがどのように変わっているかについて書きます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
任意のヘッダーを追加した時、Rails側でキーが変換されていることが分かりました。
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@task = Task.new
logger.debug(1234567)
request.headers.sort.map { |k, v| logger.info "#{k}:#{v}" }
logger.debug(request.headers['abc-def'])
logger.debug(request.headers['HTTP_ABC_DEF'])
logger.debug(request.headers['abc-xxx-yyy'])
logger.debug(request.headers['HTTP_ABC_XXX_YYY'])
end
リクエストを送る
$ curl -H 'abc-def:value' -H 'abc_xxx_yyy: value2' http://localhost:3000/
ログの出力結果
1234567
GATEWAY_INTERFACE:CGI/1.2
HTTP_ABC_DEF:value
HTTP_ABC_XXX_YYY:value2
...
value
value
value2
value2
http のリクエストヘッダーの key に HTTP_ が付与されました。また、- も _ に変更されています。
詳しい処理については、参考のリンクをご覧ください。