ドメインを省略せずに表記する完全修飾ドメイン名(FQDN)の記述において、末尾に「.(ドット)」を付けるのが正式な表記です。末尾のドットの有無がどういう場合に問題になるのかについて、DNSサービス検出ツール(DNS-SD)についての情報をまとめるサイトのdns-sd.orgが掲載しています。

Trailing Dots in Domain Names

http://www.dns-sd.org/trailingdotsindomainnames.html



余り知られていないことではあるものの、例えば「https://gigazine.net」ではなく「https://gigazine.net.」と末尾に「.(ドット)」を付けてアクセスしてみても問題なくGIGAZINEが表示されるように、末尾にドットを付けるのが完全修飾ドメイン名の正式な表記です。



1987年に発効されたDNSの仕様を定めた文章のRFC 1034では下記のように記述されています。

When a user needs to type a domain name, the length of each label is

omitted and the labels are separated by dots ("."). Since a complete

domain name ends with the root label, this leads to a printed form which

ends in a dot. We use this property to distinguish between:

(ユーザーがドメイン名を入力する時、ラベルの長さは省略され、ラベルはドット「.」で区切られます。完全なドメイン名はルートラベルで終わるため、ドットで終わるように記述されます。私たちはこの性質を次のものを区別するために使用します)

- a character string which represents a complete domain name

(often called "absolute"). For example, "poneria.ISI.EDU."

(「絶対」とも呼ばれる完全なドメイン名であることを表す文字列。例えば「poneria.ISI.EDU.」)

- a character string that represents the starting labels of a

domain name which is incomplete, and should be completed by

local software using knowledge of the local domain (often

called "relative"). For example, "poneria" used in the

ISI.EDU domain.

(「相対」とも呼ばれる不完全なドメイン名の開始ラベルを表す文字列。不完全なため、ローカルドメインの知識を使ってソフトウェアが補完する必要があります。例えば「ISI.EDU」ドメイン内の「poneria」が該当します)


この絶対ドメインと相対ドメインの違いはUnixのファイル名の絶対パスと相対パスの違いのようなものとのこと。Unixでは、ファイル名の先頭がスラッシュで始まっていれば絶対的なパスを指定しており、スラッシュで始まっていなければ現在の作業ディレクトリなどのコンテキストに依存しなければどこのファイルを指定しているのかが分からない相対的なパスとなっています。

例えば「emacs」のようなコマンドを入力すると、Unixは環境変数の/usr/bin/emacs」という記述でコマンドを実行すると指定したファイルを直接実行することができ、よりどのプログラムを実行しているのかが明確になります。



DNSではサーチリストを使用することでドメインを補完させることができます。例えばサーチリストに「tokyo.example.jp」「paris.example.jp」「example.jp」と設定されている場合、ユーザーがウェブブラウザに「www」と入力するとOSは「www.tokyo.example.jp」、「www.paris.example.jp」、 「www.example.jp」の順にドメインを検索します。

ここで問題となるのが、「www.example.net」といったように人間から見るとドメイン名を完全に入力したように見えても、DNSからは「『.』で終わっていないということは、相対的なドメインだ」と認識されるということです。このため、「www.example.net」と入力してもサーチリストの機能が働き、「www.example.net.example.com」といった目的とは異なるドメインが取得されてしまうことがあります。この問題は「www.example.net.」といったように末尾に「.」を付けて完全修飾ドメイン名であることを明示すれば解決します。

特にサーバーのドメイン名を埋め込んだソフトウェアを作成する場合、ドメイン名の末尾にドットが付いていない場合はユーザーのDNSサーチリストに従って検索されてしまう可能性があるとのこと。末尾のドットが無くてもほとんどの場合は正常に接続されますが、DNS関連のトラブルが発生した際にユーザーのサーチリストの設定がどうなっているのかを気にしたくない場合は末尾にドットが付いた完全修飾ドメイン名を使用するのが良さそうです。

HTTPプロトコルを策定した人々はこの問題を理解しており、RFC 1738では下記のように「Host」ヘッダーでは「完全修飾ドメイン名」を使用するように指定されています。

3.1. Common Internet Scheme Syntax

//<user>:<password>@<host>:<port>/<url-path>

host

The fully qualified domain name of a network host


しかしほとんどのウェブブラウザはサイトへのアクセス時に、ユーザーの入力を元にコンピューターが構築して接続に使用した完全修飾ドメイン名ではなく、ユーザーの入力をそのまま「Host:」ヘッダーに入力してしまいます。そのため、「www.example.com」というサイトにアクセスする時に「Host:」ヘッダーには次の3つのパターンが存在する可能性があるとのこと。

・「www.example.com」という相対的なドメイン

・「www.example.com.」という完全修飾ドメイン

・「www」というサーチリストによって「example.com」が補完された場合のユーザーの実際の入力部分

Hostヘッダーが一意に定まらないことについて、元の文章では「残念ながらウェブブラウザを実装している人たちは完全修飾ドメイン名を使用する意味を理解できないようだ」と述べられています。

なお、サーチリストを使用するとそのほかにもTLDとの衝突問題などが発生するため、日本ネットワークインフォメーションセンター(JPNIC)はサーチリストを使用しないよう呼びかけています。