要約
- 相対参照は既知の基底が供給する方式、オーソリティー、経路を省き、反復を減らして文書群を一緒に移せるようにした。
- 解決は決定的な構文変換である。絶対基底を選び、参照形に応じて構成要素を継承・置換し、経路結合、完全な
.と..の除去、再構成を行う。 - 相対参照だけでは世界的に安定した識別子ではない。証拠、署名、監査は有効基底か解決済み絶対対象を保存する必要がある。
文書は住所の一部をすでに知っていた
絶対ロケーターは同じ方式、ネットワーク位置、経路の大半を繰り返す。リンクを含む文書自体がどこかから届き、その場所が文脈を持っている。
Tim Berners-Leeが1994年に公表したRFC 1630は、自身のURIが定まった対象内の部分形を説明した。文字を節約するだけでなく、関係する対象群を内部参照の書き換えなしに移せた。上位の命名変更を下位文書から隠せる。
条件も明記された。管理された文脈の外へ渡すなら完全形を使う。短いリンクは省略情報を含まない。基底が同行するか、読取側で再現可能に確立されて初めて移植できる。
初期規則はスラッシュと完全な.、..を階層構文にした。末尾スラッシュは空の最終区間なので、ディレクトリー位置の基底と資源位置の基底は同じ経路を貸さない。
相対URLは標準変換になった
1995年6月のRFC 1808は、相対URLを絶対基底に対する簡潔な位置として定義した。基底が方式、ネットワーク位置、経路の一部を供給し、参照は変更部分を示す。
単なる文字列連結ではない。方式を持つ参照は絶対であり、ネットワーク位置はオーソリティーを置換する。先頭スラッシュは根から経路を置換し、通常の相対経路は基底末尾と結合する。クエリーとフラグメントは独自の構成要素規則に従う。
局所階層を保つ文書群を新しいホストや接頭辞へ動かせば、相対辺は新基底に従う。絶対辺は旧オーソリティーを指し続ける。依存の宣言が異なるのであり、一方が常に優れるのではない。
HTMLは欠けた文脈を文書に持たせた
1995年のHTML 2.0を定めるRFC 1866は、アンカー、リンク、画像、入力、フォームに相対対象を用いた。取得時の文脈から外れて読む場合、任意のBASE要素が絶対基底を供給できた。
便利さは制御も集中させた。一つの埋込み基底が全相対参照を再解釈する。接頭辞反復を避ける仕組みだからこそ、その接頭辞の変更がグラフ全体へ及ぶ。
基底は表示用メタデータではなく資源同一性への入力である。除去、置換、適用段階の変更は判断を変える。
一般URI構文は継承を構成要素ごとに分けた
1998年のRFC 2396は解決をURI参照へ一般化した。方式、オーソリティー、経路、クエリー、フラグメントを解析し、参照形ごとに供給、継承、置換する。
相対経路では基底経路の最後の区間を除き、参照を加えてドット区間を処理する。末尾スラッシュが結果を変える理由である。ただしURI経路は必ずしもファイルシステムではない。完全区間の.と..だけが一般的役割を持ち、名前内部の点は通常データである。
解決はサーバーへ接続しない。対象識別子を作るだけで、参照取得、転送、認可、存在は後の別判断である。
現行契約は解決前に基底を一つ選ぶ
RFC 3986は、狭いフラグメントのみの場合を除き、既知基底を要求する。基底は絶対URIで、自身のフラグメントを除いて使う。
基底源には優先順位がある。内容に埋め込まれた基底、包む実体が供給する基底、取得URI、アプリ既定値の順である。複数の候補を一つの入力へ絞る。
方式付き参照は自分の構成要素を供給する。//は方式を借りてオーソリティーを置換する。先頭/は方式とオーソリティーを借り、経路を置換する。相対経路は基底の最終区間以外と結合し、オーソリティーがあり空経路なら/を先頭に置く。
空の参照経路は基底経路を継承し、独自クエリーがなければ基底クエリーも継承する。参照のフラグメントは対象に付く。構成要素ごとの判断である。
ドット区間は解決時の指示だった
remove_dot_segmentsは抽出と結合の後に働く。完全な.は階層を増やさず、..は存在する直前の出力区間を除く。過剰な親区間もアルゴリズムに従い、想像上の汎用ファイル根を越えるわけではない。
これは構文変換で、実在ディレクトリーを照会しない。実装は文字列バッファーでなくスタックを使えても、同じ入力から同じ再構成結果を出す。
同一文書かどうかも解決後、絶対結果と基底を比較して決める。表面が短いだけでは判断しない。
移動性は制御された依存だった
相対リンクは内部関係を恒久的ホストや接頭辞に固定せず、文書集合を置換可能にした。しかし文脈から独立したことはない。欠けた住所は文書、容器、取得処理、アプリから来た。
../sourceだけの来歴記録は基底から切り離すと公開情報源を示せない。短文だけ署名し基底を含めないマニフェストは対象の一部を未署名にする。解決結果だけのログは、どの文脈判断が作ったか示せない。
長期証拠は原参照、選択基底、行動時の解決対象を組にする。
出典
- RFC 1630, Universal Resource Identifiers in WWW: https://www.rfc-editor.org/rfc/rfc1630.html
- RFC 1808, Relative Uniform Resource Locators: https://www.rfc-editor.org/rfc/rfc1808.html
- RFC 1866, Hypertext Markup Language — 2.0: https://www.rfc-editor.org/rfc/rfc1866.html
- RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax: https://www.rfc-editor.org/rfc/rfc2396.html
- RFC 3986, Uniform Resource Identifier (URI): Generic Syntax: https://www.rfc-editor.org/rfc/rfc3986.html
これらは歴史とアルゴリズムを示すが、現在のブラウザー固有動作や特定アプリの安全性を証明しない。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
