Rails5 で http ヘッダーリクエストのキーが変換される件
Ruby Ruby on Rails
Published: 2019-05-25

やったこと

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_ が付与されました。また、- も _ に変更されています。

詳しい処理については、参考のリンクをご覧ください。

参考