ファイル名の最後のドット(.)から後ろの部分を『拡張子』と呼びます。index.html の拡張子は .html で、title.gif の拡張子は .gif です。拡張子はそのファイルが何であるかを示します。例えば、.html はHTML文書、.txtはテキスト文書、.gifはGIF画像、.jpgはJPEG画像のファイルであることを示しています。
Windowsにおいては、ファイルをダブルクリックした時の動作はこの拡張子によって決まります。例えば .txt のファイルをダブルクリックすると[メモ帳]が起動するし、.bmpのファイルをダブルクリックすると[ペイント]が起動します。どの拡張子にどんなアプリケーションが割り当てられているかは、エクスプローラ(インターネットエクスプローラではない方)の[表示]-[オプション]-[ファイルタイプ]で確認することができます。
WEBの世界では拡張子という概念と、もうひとつ『MIMEタイプ』という概念があります。MIMEタイプとは「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。例えばMIMEタイプには以下のようなものがあります。
ファイル形式 拡張子 MIMEタイプ テキスト .txt text/plain HTML文書 .htm .html text/html GIF画像 .gif image/gif JPEG画像 .jpg .jpeg image/jpeg CGIスクリプト .cgi application/x-httpd-cgi ブラウザが xx.gif というファイルをWEBサーバーに要求する際、WEBサーバーはxx.gifの内容(データ)を「これは image/gif タイプのデータです」と言いながら返却してくれます。これにより、ブラウザは受け取ったデータを正常に処理することができるのです。
WEBサーバーによって設定方法は異なるのですが、現在最もよく使用されている Apache というWEBサーバーでは、.htaccess というファイルによってMIMEタイプを指定します。データ(xxx.htmlなど)と同じディレクトリ(フォルダ)に .htaccess という名前のファイルを用意して、その中身をAddType text/html .htmlとしておけば、WEBサーバーは、「.html という拡張子のファイルは text/html というMIMEタイプのデータとして送信する」という処理を行ってくれます。.html や .gif などに関してはプロバイダ側がすでにこの設定を行ってくれているのでわざわざ追加する必要はありませんが、CGIを設置したり、RealAudioなどのちょっと特殊なファイルを設置する際には、.htaccess による設定が必要です。
HTML文書の拡張子は .html だったり .htm だったりします。元々は .html だったのですが、マイクロソフト社の古いOS(MS-DOS や Windows 3.1)では、拡張子を3文字までしか扱えなかったため、.html を .htm、.jpeg を .jpg と記述していました。そのため、.html と .htm が存在しています。現在でもまだ3文字の拡張子しか扱えないソフトが残っていたり、マイクロソフトが .html よりも .htm の方を標準的に使用しようとしていたりして、現在は .html と .htm が混在した状態になっています。
.html と .htm は、基本的にはどちらでも構いませんが、プロバイダによっては片方しか使用できないところがあります。
.shtmlという拡張子を時たま見かけますが、これは、SSIを含んだHTML文書によく使用されます。SSIを実行するには、WEBサーバがHTML文書内をすべて解釈しなくてはならないので、「.html や .htm はSSI解釈しない、.shtml のみをSSI解釈する」と設定することにより、WEBサーバーの負荷を緩和しています。