domain
って書かれているのでサブドメインもまるっとひっくるめてもってくるのかと思いきやそうではなかったのでメモ
環境
rails (5.2.0) actionpack (= 5.2.0)
実装
request.domainを深掘りすると以下のコードに突き当たる
# /actionpack-5.2.0/lib/action_dispatch/http/url.rb def extract_domain_from(host, tld_length) host.split(".").last(1 + tld_length).join(".") end
ホスト名に対してトップレベルドメイン長さ(tld_length)分だけ取得して抽出する。
で引数に使われている数値は同ファイル内で定義されていて
# /actionpack-5.2.0/lib/action_dispatch/http/url.rb mattr_accessor :tld_length, default: 1
ってことなので基本はセカンドレベルドメイン相当しか取得ができない。
ちなみに host は以下の内容で抽出される
def raw_host_with_port if forwarded = x_forwarded_host.presence forwarded.split(/,\s?/).last else get_header("HTTP_HOST") || "#{server_name || server_addr}:#{get_header('SERVER_PORT')}" end end