[10] HTTP では URL の比較と正規化の方法が規定されています。 基本的にはオクテット列としての比較になりますが、 大文字と小文字の同一視など、多少の正規化が行われます。
[11] HTTP 仕様上どこで比較が行われるのかは明確には記述されていませんが、 キャッシュされている資源の URL との照合に当たって同一性の判断に使うのでしょう。
[88] http:
と https:
の URL
は、 RFC 3986//6 の方法により正規化、比較できます >>87。
[89] 既定のポート番号と等しいポート番号なら、 省略したものが正規形です >>87。
[90] 絶対形で OPTIONS
要求の要求対象として使われる場合を除き、
path が空であるものと /
は等価で、 /
が正規形です。 >>87
[91] host は大文字・小文字不区別で、小文字が正規形です。 >>87
[92] reserved 以外の文字はパーセント符号化されているのと等価で、 パーセント符号化しないのが正規形です。 >>87
[85] HSTS における実効要求URLの比較では、 >>16 の path が無い場合と /
の場合は別とします >>84。
[22] RFC 1945 では比較の方法は規定されていませんでしたが、かわりに
http:
URL の正準形が定義されていました。
[18] RFC 2068 で正準形のかわりに比較の規定が追加され、 RFC 2616 で改訂されています >>8。両者でその内容は変わっていません。
[83] この比較の適用対象の URL は明記されていません。 http:
に限らず、
https:
など関係する URL scheme 一般に適用可能なものとみられます。
[19] RFC 2616 に対する正誤票で、元々 >>17
は「reserved
または unsafe
」となっていたところが、
unsafe
が削られています。
http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.com:/%7esmith/home.html
この3つはいずれも同等。
[2] RFC 2616 の規定によると http://foo.example:80/ と http://foo.example:00080/ は等しくありませんね。
実際のブラウザとかの実装は等しいとみなすみたいですけど。 (でもそうじゃない実装ももしかしたらあるかもしれない。)
OPTIONS
に限るという条件は以前の仕様にはありませんでした。 文脈により、2種類の比較・正規化があり得ることとなります。