質問: ロリポップを使っていて画像が表示されなかったので原因究明すると 理由は拡張子のJPGがjpgと指定されていたからでした これで疑問に思ったんですが * JPGとjpg * JPGとjpeg * `http://example.com/about` と `http://EXAMPLE.COM/about` * `http://example.com/About` と `http://example.com/about` こういった大文字小文字は区別は何がしているのでしょう ブラウザ、サーバー、それともルーターとか別の何かでしょうか? 区別するという情報は出てきますが何がどうやって、なぜ区別しているのかを書かれているサイトがまったくみつからなかったです
回答: > > 大文字小文字は区別は何がしているのでしょう > > ブラウザ、サーバー、それともルーターとか別の何かでしょうか? > > なぜ区別しているのかを書かれているサイトがまったくみつからなかったです > > > たしかに・・。 どんな仕組みで ブラウザから WEB サーバーに データをやり取りしているか、 ちゃんと説明すると面倒ですしね・・。 ざっくりした回答としては ``` 一言でいうと、Windows は 昔から大文字小文字を区別しない主義。 Linux は 大文字小文字を区別する主義。 Apache では 外部モジュールの設定によって 大文字小文字を区別しなくすることもできるが 最初からは設定されていない事が多い。 ASP.NET Core は Linux であっても 大文字小文字を区別しない。 そのほかの WEB サーバー (Ruby on Rails , Tomcat 等) は その設定を確認してください。 ``` という感じになります。 より詳しい事を勉強したいのであれば、 タネンバウム本には IIS や Apache の 前までは 詳細に載っています。 IIS や Apache は ネット上にドキュメントはたくさんあると思います。 そこから先の Tomcat や ASP.NET Core 等は も マニュアルは 公開されていると思います。 読み終えた頃には アプリも開発できる 立派なインフラ技術者になっているでしょう。 かいつまんで の 例で 解説すると 昔から RFC 等で 厳密に決まっている部分と、アプリ毎に自由に設定できる部分に分かれます。 1) URL を サーバー部分と それ以外に分ける URI の 仕様に沿って ブラウザが URL を 分解する。 分解するだけで 大文字小文字は変換しない。 http:// の部分がスキーム ( https:// や file:// ) example.com の部分 が サーバー名 /about の部分が HTTP サーバーに送信する パス や クエリ RFC3986 日本語訳 がわかりやすいようです。 2) サーバー名を IP アドレスに変換する DNS サーバーの仕組みを使って example.com を IPアドレスに変換します。 DNSでは 大文字小文字は 区別しないため、大文字 EXAMPLE.COM でも 小文字 example.com でも 同じ IPアドレスを返します。 3) WEB サーバー に ページの要求を出す ( ブラウザから ) 上記 2) で 見つかった サーバーに対して tcp ポート 80 番に 向かって telnet 要求を投げます。 ``` GET /about ``` このとき ブラウザから 大文字小文字を変換せずに要求を出します。 ※ ただし `/help.html#section1` の `#section1` (フラグメントは) ブラウザ側で取り除いて `GET /help.html` と URL のセグメント部分以降を切り取って要求を出します。 4) WEB サイト ルーター の動作 企業では WEB サーバー の前に 性能改善のための ロードバランサーや、キャッシュサーバー や ルーターが存在します。 ここでは 大文字小文字変換も 文字加工もせずに WEB サーバーに要求を投げます。 5) WEB サーバー Windows であれば IIS 、Linux であれば inetd や xinetd 経由で Apache 等 サーバーアプリケーションが ポート 80 番の口を開けて 要求を待っています。 入力された `GET /about` を解析して パスに対応した WEB アプリケーションを起動します。 5-1) IIS の場合 IIS では サーバー上に複数の アプリを ディレクトリを変えて設定できいます。 `/app1/about` `/app2/about` で 別のディレクトリに配布された アプリを起動して そのアプリに対して `/about` を投げます。 IIS の管理ツールで 仮想パス毎に 起動する WEB アプリケーションが設定できると思います。 この場合 IIS では パスの 大文字、小文字は 区別しません。 ### 5-1-1) IIS から呼び出された WEB アプリ 実に様々な アプリが呼び出されますが、そのアプリによって 大文字、小文字を区別するか どうかは 異なります。 そもそも、Windows では ファイルシステムが 大文字小文字を区別しないことと、 ASP.NET や ASP.NET Core では 大文字小文字を区別しないという ロジックがアプリに組み込まれているため、大文字小文字を区別しません。 5-2) Linux の場合 すみません、Linux は あまり詳しくありません。 Linux は 昔から 大文字小文字を区別するという文化があるため、大文字小文字の違いは 注意が必要だと思います。 Apache であれば `mod_spelling` というモジュールを組み込めば 大文字小文字の違いを吸収して くれるようですが レンタルサーバーに モジュールを組み込み可能なのかは レンタルサーバーの マニュアルを見てください。 とこんな感じでしょうか。 お仕事で WEB アプリの 障害切り分けをする人は、この程度の知識は持っていると思います。 使うだけの人は ここまで知る必要はないので、わかる人に聞いてください。