URIの一般的構文の正規化

こんばんは!そういえば日曜日に西本願寺に行ってきたんです。お寺っていいですよね。匂いとか。お金があったら寺買収したいです。

今日はURIの一般的構文の正規化のお話というかメモです。そういえばmailto:のtoは正規化せずに、どこかでtoのリストを持つようにして比較に使うようにすれば良いかもしれません。domainが同じでdisplay-nameが違う場合は…同値?

パーセントエンコーディング

  • パーセントエンコーディング内のa〜fは大文字に変換する (RFC 3986 section 6.2.2.1)
    • example://a/b/c/%7bfoo%7dexample://a/b/c/%7Bfoo%7D
  • 非予約文字(unreserved)がパーセントエンコーディングされている場合はそれをデコードする (RFC 3986 section 6.2.2.2)
    • example://a/b/%63/example://a/b/c/

scheme

  • 小文字に変換する (6.2.2.1)
    • HTTP://example.com/http://example.com/

authority

  • authority(host)がschemeでの規定値ならauthority(host)を削除する。userinfoやportが空でないときにhostがschemeの規定値ならhostは削除しない (RFC 3986 section 6.2.3)
    • file://localhost/foofile:///foo (file:のhostの規定値の定義はRFC 1738 3.10)
    • file://foo@localhost/localhostを削除しない
userinfo
  • 空のとき、schemeの仕様にそう定義されていなければ区切り子("@")を削除しない (RFC 3986 section 6.2.3)
    • http://@example.com/ は"@"を削除しない
host
  • 小文字に変換する
    • http://EXAMPLE.com/http://example.com/
port
  • portが空かそのschemeでの規定値ならportの区切り子(":")とportを削除する (RFC 3986 section 6.2.3)
    • http://example.com:80/http://example.com/ (http:のportの規定値の定義はRFC 2616 section 3.2.2)
    • http://example.com:/http://example.com/

path

  • ドットセグメント(パスセグメントで"."や".."に完全に一致するもの)は削除する (RFC 3986 section 6.2.2.3)
    • http://example.com/a/./b/../http://example.com/a/
  • authorityがありpathが空ならpathを "/" にする (RFC 3986 section 6.2.3)
    • http://example.comhttp://example.com/

query

  • 空のとき、schemeの仕様にそう定義されていなければ区切り子("?")を削除しない (RFC 3986 section 6.2.3)
    • http://example.com/? は"?"を削除しない

fragment

  • 空のとき、schemeの仕様に関わらず区切り子("#")を削除しない (RFC 3986 section 6.2.3)
    • http://example.com/# は"#"を削除しない

寺は買収できるんですかね…。買収できなかったら建立ですね。