絶対URLと相対URL、絶対パスと相対パス

このページでは、絶対URLと相対URL、絶対パスと相対パスについて説明します。

目次

簡単なまとめ

※忙しい方はここだけ確認してください。不明点がある場合は次以降の項目も読み進めていってください。

  • http」「https」などの「スキーム」と呼ばれる部分から始まるものは「絶対URL」です。「絶対パス」ではありません。
  • 「相対URL」は「//example.com」のように、スキームから始まらないものも含みます。「相対URL」=「相対パス」ではありません。
  • /」から始まるものは「相対URL」であり、かつ「絶対パス」です。「相対パス」ではありません。

「絶対URL」と「相対URL」の違い

  • 「絶対URL」はスキームから始まる URL (例 https://example.com/...)
  • 「相対URL」はスキームから始まらない URL (例 //example.com/, /a/b/c, a/b/c)

「絶対パス」と「相対パス」の違い

  • 「絶対パス」は「/」から始まるパス (例 /a/b/c, /a/../c)
  • 「相対パス」は「/」から始まらないパス (例 a/b/c, ./a/b/c)

「絶対URL」と「絶対パス」の違い

  • 「絶対URL」はスキームから始まる URL (例 https://example.com/...)
  • 「絶対パス」は「/」から始まるパス (例 /a/b/c, /a/../c)

「相対URL」と「相対パス」の違い

  • 「相対URL」はスキームから始まらない URL URL (例 //example.com/, /a/b/c, a/b/c)
  • 「相対パス」は「/」から始まらないパス URL (例 a/b/c)

「URL」と「パス」の違い

  • 「URL」は URL の中にスキーム、ホスト、パスなどのいくつかのパーツを含んだ形式
  • 「パス」はパスだけの形式。また、「パス」はファイルシステムでも使用します (Linux のパス形式が URL のパス形式と近いです)。

ファイルシステムのパスの話をしている時には URL は全く関係ないため、その時には「絶対URL」「相対URL」という用語は無関係です。

このページの説明に関する注意

※わからない場合はこの部分は読み飛ばしてください。

  • このページでは規格 (RFC 3986 や RFC 7230、HTML5 (HTML Living Standard, URL Living Standard)) にできる限り合わせた説明をしていますが、名称は一般的な呼び方を使用しています。(HTML5 関連規格も一般的な呼び方のほうを使用しています)
    • 「URL」は、RFC 規格では「URI」です。(URI は URL と URN という2つの形式を統合した形式です)
    • 「絶対URL」は、RFC 規格では「絶対 URI」(Absolute URI) です。
    • 「相対URL」は、RFC 規格では「相対的参照」(Relative reference) です。
  • このページでは URL の中でも特に http URL と https URL の説明をしています。(file URL や data URL などが入ると話がわかりづらくなってしまうためです)

絶対URL ?

絶対URL (Absolute URL) は、どのパーツも補う必要がない「完全な」URL のことを指します。
簡単にいうと、「http」「https」のような、「スキーム」(scheme) と呼ばれる部分から始まる URL のことです。

絶対URL (http URL, https URL の絶対URL) として必要なパーツは、下記のようなものです。

パーツ 例・内容
スキーム (scheme) http」「https
:// スキームとその次のパーツを区切るために必要な記号
オーソリティ (authority) example.com」「123.456.789.012」「example.com:8080」「user:password@example.com」など ※1
パス (path) /a/b/c」など。パスは無くてもOKです

※1 「example.com」「123.456.789.012」の部分は「ホスト」、「8080」の部分は「ポート」、「user:password」の部分は「ユーザー情報」と呼ばれます。最低限ホストが必要です。

絶対URLの例

  • http://example.com (http スキームとホスト。パスが無くてもOK)
  • https://example.com/ (https スキーム、ホスト、パス (/))
  • https://example.com/a/b/c (https スキーム、ホスト、パス (/a/b/c))
  • https://example.com/a/b/c?d=123 (上記と同じ + 前述の表には記載していませんが、?d=123 のように ? につづく「クエリ」と呼ばれるパーツがあっても絶対URLとされています)

絶対URLではない例

  • /a/b/c (これは絶対パス (後述) で、相対URLの1つです。絶対URLではありません)
  • ./a/b/c (これは相対パス (後述) で、相対URLの1つです。絶対URLではありません)
  • example.com/a/b/c (これは相対URLです。「http」のようなスキームから始まっていないので、絶対URLではありません)
  • https://example.com/a/b/c#def (#def のように # につづく「フラグメント」「フラグメント識別子」と呼ばれるパーツがあるものは絶対URLとされていません。ただし、URLではあります)

相対URL ?

相対URL (Relative URL) は、「別のURL (現在の位置。基底URL) を基準にして、新しい位置を示すためのURL」のことで、欠けている部分を別のURLで補う必要があるURLのことを指します。
簡単にいうと、スキームから始まらない URL のことです。

相対URLの例

  • //example.com/ (スキームが欠けている)
  • / (スキームとオーソリティが欠けている。後述の絶対パスでもある)
  • /a/b/c (同上)
  • ./a/b/c (同上。後述の相対パスでもある)

相対URLが基底URLで補われる例

基底URL (現在の位置) が https://example.com/x/ の場合、下記のようにパーツが補われます。

補われる前 補われた後
//example.com/ https://example.com/ (スキームが基底URLのもので補われた。パスは / (絶対パス) のため補う必要がない)
/ https://example.com/ (スキームとオーソリティが基底URLのもので補われた。パスは / (絶対パス) のため補う必要がない)
/a/b/c https://example.com/a/b/c (同上)
./a/b/c https://example.com/x/a/b/c
(. は同じ位置という意味の記号です。この例では /x/ と同じ、という意味になるので /x/ + ./a/b/c/x/a/b/c になります)

絶対URLと相対URLの違い

ここまでで見てきたように、絶対URLと相対URLは下記の違いがあります。

形式 特徴
絶対URL スキームから始まる URL。パーツが欠けておらず、何かで補う必要がない
相対URL スキームから始まらない URL。パーツのどこかが欠けていて、欠けた部分を基底URLというベースとなるURLで補う必要がある

絶対パス ?

絶対パス (Absolute path) は、パスの部分の中でどこも補う必要がない「完全な」パスのことを指します。
簡単に言うと、「/」から始まるパスのことです。「フルパス」(Full path) ともよばれます。

絶対パスの例

  • / (/ のみですが、/ から始まっているので絶対パスです)
  • /a/b/c (/ から始まっているので絶対パスです)
  • /a/../c (同上) ※2

※2 .. は「1つ上の階層を上る」という意味の記号です。そのため、「/a/../c」は整理すると「/c」です。
  (このように整理することは「パスの正規化」と呼ばれています。これは「パスを補う」こととは別の作業なので、相対パスではありません)

絶対パスではない例

  • ./ (これは相対パスです。/ から始まっていないので絶対パスではありません)
  • a/b/c (同上)
  • ../a/ (同上)
  • https://example.com/ (これは絶対URLです。絶対パスではありません)

相対パス ?

相対パス (Relative path) は、「別のパス (現在の位置) を基準にして、新しい位置を示すためのパス」のことで、欠けている先頭部分を別のパスで補う必要があるパスのことを指します。
簡単に言うと、「/」から始まらないパスのことです。

相対パスの例

  • ./ (/ から始まっていないので相対パスです)
  • a/b/c (同上)
  • ../a/ (同上)

相対パスではない例

  • / (これは絶対パスです。/ から始まっているので相対パスではありません)
  • /a/b/c (同上)
  • /a/../c (同上)

相対パスが別のパスで補われる例

別のパス (現在の位置) が /x/ の場合、下記のようにパスが補われます。

補われる前 補われた後
./ /x/ (. は同じ位置という意味の記号です。/x/ と同じ位置なので /x/ です)
a/b/c /x/a/b/c (先頭が補われた)
../a/ /x/../a/ (同上。正規化すると /a/ になります)

絶対パスと相対パスの違い

ここまでで見てきたように、絶対パスと相対パスは下記の違いがあります。

形式 特徴
絶対パス / から始まるパス。別のパスで補う必要がない
相対パス / から始まらないパス。別のパスで補う必要がある

参考