URLの拡張子が大文字小文字を区別するかは何が決めている?

投稿者: Anonymous

ロリポップを使っていて画像が表示されなかったので原因究明すると
理由は拡張子のJPGがjpgと指定されていたからでした

これで疑問に思ったんですが

  • JPGとjpg
  • JPGとjpeg
  • http://example.com/abouthttp://EXAMPLE.COM/about
  • http://example.com/Abouthttp://example.com/about

こういった大文字小文字は区別は何がしているのでしょう

ブラウザ、サーバー、それともルーターとか別の何かでしょうか?

区別するという情報は出てきますが何がどうやって、なぜ区別しているのかを書かれているサイトがまったくみつからなかったです

解決

http://exampple.com/path/to/somedir/somefile.someextension?query=q#frag を例にします。

ルータは単にデータを中継するだけなので、データを改変せずに流すだけのものです。
ブラウザも得た html を表示するだけなので、ブラウザも URL の大文字小文字を区別しません。
# 一部のクローラは誤解から URL を全部小文字に変換してしまうものもあるとのこと。
というわけで、区別するとしたらサーバ側です。小文字に変換しちゃうのもサーバ側。で、以下 TL;DR

https://tools.ietf.org/html/rfc3986
https://triple-underscore.github.io/rfc-others/RFC3986-ja.html
http:// の部分は「スキーム」と呼ばれます。ここは大文字小文字を区別しないが、小文字にすべきとあります。

http://www5d.biglobe.ne.jp/stssk/rfc/rfc4343j.html
example.com の部分はドメイン名 (オーソリティ) ですが、ここも大文字小文字を区別しません。慣例的に小文字を使うことになっている模様。実際 HTTPS://JA.STACKOVERFLOW.COM を開くと、開けるけれども web server (と DNS server) が URL を小文字に変換してしまいます。
# バグっているクローラが以下略。なので URL には小文字を使ったほうが安全なことが多い以下略。

path/to/somedir/somefile.someextension の部分はパス
?query=q はクエリ
#frag はフラグメント
これらには大文字小文字規定がなく、よって大文字を使ってもいいし小文字を使ってもいいし、区別してもいいし区別しなくてもいいとのこと。実際 stackoverflow.com は小文字表記を wikipedia.org はキャピタル表記を好んで使っています。
名目上パスと名付けられていますが URL 内パスが実際に web server 上の真のファイルを指すかどうかも決まっていなくて、プログラムが URL を生成解釈している場合にはこのパス部分は web server 上で動いているプログラムに対するパラメータにすぎません。

プログラムに対するパラメータなら大文字小文字を区別するか否かはプログラムの仕様次第。
(そのままデータベースに query を発行しているなら、データベースの照合設定による)
真にファイル名なら大文字小文字を区別するか否かはファイルシステムの仕様次第。

あなたの書いた HTML ファイル内のリンクは真にファイル dir/image.jpg を指していて
ロリポップの web server はファイル名の大文字小文字を区別する仕様で (Linux 系)
だから提示の状況においては「 Linux OS がファイル名の大文字小文字を区別する仕様だから、真にファイル名を指す path にいては大文字小文字が区別された」ということになりそうです。

web server 上で HTML を生成するプログラムが URL のパス部を受け取る・返却する場合においてはそのプログラムが大文字小文字を区別するか否か、小文字(あるいはキャピタル)に正規化するか否かの仕様次第ということです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *