
URI正規化とは、 URIを統一的な方法で変更・標準化するプロセスです。正規化プロセスの目的は、URIを正規化されたURIに変換することで、構文的に異なる2つのURIが同等であるかどうかを判断できるようにすることです。
検索エンジンは、複数のURIで見つかる可能性のあるページを正しくランク付けし、重複ページのインデックス作成を減らすためにURI正規化を使用します。Webクローラーは、同じリソースを複数回クロールしないようにURI正規化を実行します。Webブラウザは、リンクが訪問されたかどうか、またはページがキャッシュされているかどうかを判断するために正規化を実行する場合があります。Webサーバーも、さまざまな理由で正規化を実行する場合があります(たとえば、クライアントのリクエストから発生するセキュリティリスクをより簡単に傍受できるようにするため、キャッシュに保存されている各リソースに対して1つの絶対ファイル名のみを使用するため、ログファイルに名前を付けるためなど)。
正規化にはいくつかの種類があり、その中には常に意味を保持するものもあれば、そうでないものもある。
RFC 3986 [ 1 ]では、同等の URI を生成するために、以下の正規化が説明されています。
%3a%3Ahttp://example.com/foo%2a→http://example.com/foo%2AHTTP://User@Example.COM/Foo→http://User@example.com/Foo%41–%5Aと%61– %7A)、数字( %30– %39)、ハイフン ( %2D)、ピリオド ( %2E)、アンダースコア ( %5F)、チルダ ( %7E) の範囲にあるものは、パーセントエンコードする必要がなく、対応する非予約文字にデコードする必要があります。[ 4 ]例:http://example.com/%7Efoo→http://example.com/~foo.は、RFC 3986 で説明されているパスにremove_dot_segments アルゴリズム[ 5 ]を適用して削除する必要があります。 [ 6 ]例:..http://example.com/foo/./bar/baz/../qux→http://example.com/foo/bar/quxhttp://example.com→http://example.com/http://example.com:80/→http://example.com/HTTPおよびHTTPS URIの場合、RFC 3986に記載されている以下の正規化によって同等のURIが得られる可能性がありますが、標準に準拠していることは保証されません。
http://example.com/foo→http://example.com/foo/以下の正規化を適用すると、同じリソースを参照している場合でも、意味的に異なるURIが生成されます。
http://example.com/a/index.html→http://example.com/a/http://example.com/default.asp→http://example.com/http://example.com/bar.html#section1→http://example.com/bar.htmlhttp://208.77.188.166/→http://example.com/https://example.com/→http://example.com/http://example.com/foo//bar.html→http://example.com/foo/bar.htmlhttp://www.example.com/とhttp://example.com/は同じウェブサイトにアクセスできます。多くのウェブサイトは、wwwから www なしのアドレスにユーザーをリダイレクトするか、その逆を行います。正規化ツールは、これらの URI のいずれかが他方にリダイレクトするかどうかを判断し、すべての URI を適切に正規化することができます。例:http://www.example.com/→http://example.com/http://example.com/display?lang=en&article=fred→http://example.com/display?article=fred&lang=enhttp://example.com/display?id=123&fakefoo=fakebar→http://example.com/display?id=123http://example.com/display?id=&sort=ascending→http://example.com/displayhttp://example.com/display?→http://example.com/display以前のクロールやウェブサーバーのログから取得したURIリストを調べることで、特定のWebサイト向けに正規化ルールを開発できる場合があります。たとえば、URIが
http://example.com/story?id=xyzクロールログに複数回出現する
http://example.com/story_xyz2つのURIは同等であり、いずれかのURI形式に正規化できると仮定してもよい。
Schonfeldら(2006)は、 URIリストに適用できるDUST(類似したテキストを持つ異なるURI)ルールを検出するためのヒューリスティックであるDustBusterを発表しました。彼らは、適切なDUSTルールを見つけて正規化アルゴリズムで適用すると、URIリスト内の冗長なURIの最大68%を検出できることを示しました。