絶対 URL と相対 URL、絶対パスと相対パス
このページでは、絶対 URL と相対 URL、絶対パスと相対パスについて説明します。
目次
簡単なまとめ
- 「
http
」「https
」などの「スキーム」と呼ばれる部分から始まるものは「絶対 URL」です。「絶対パス」ではありません。 - 「相対 URL」は「
//example.com
」のように、スキームから始まらないものも含みます。「相対 URL」=「相対パス」ではありません。 - 「
/
」から始まるものは「相対 URL」であり、かつ「絶対パス」です。「相対パス」ではありません。
「絶対 URL」と「相対 URL」の違い
- 「絶対 URL」は
http
,https
などから始まる URL (例https://example.com/...
) - 「相対 URL」は
http
,https
などから始まらない URL (例//example.com/
,/a/b/c
,a/b/c
)
「絶対パス」と「相対パス」の違い
- 「絶対パス」は「
/
」から始まるパス (例/a/b/c
,/a/../c
) - 「相対パス」は「
/
」から始まらないパス (例a/b/c
,./a/b/c
)
「絶対 URL」と「絶対パス」の違い
- 「絶対 URL」は
http
,https
などから始まる URL (例https://example.com/...
) - 「絶対パス」は「
/
」から始まるパス (例/a/b/c
,/a/../c
)
「相対 URL」と「相対パス」の違い
- 「相対 URL」は
http
,https
などから始まらない URL (例//example.com/
,/a/b/c
,a/b/c
) - 「相対パス」は「
/
」から始まらないパス (例a/b/c
)
「URL」と「パス」の違い
- 「URL」は URL の中に
http
,https
などのほか、ホスト (example.com
など)、パス (/a/b/c
など) のようないくつかのパーツを含んだ形式 - 「パス」はパスだけの形式。また、「パス」はファイルシステムでも使用します (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
のように#
につづく「フラグメント」「フラグメント識別子」と呼ばれるパーツがあるものは規格 (RFC 3986) によると絶対 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/ になります) |
絶対パスと相対パスの違い
ここまでで見てきたように、絶対パスと相対パスは下記の違いがあります。
形式 | 特徴 |
---|---|
絶対パス | / から始まるパス。別のパスで補う必要がない |
相対パス | / から始まらないパス。別のパスで補う必要がある |
参考
- RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
- RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- HTML Standard - 2.5 URLs
- URL Standard
更新履歴
- 2020/07/01 誤記を修正しました。
- 2020/04/25 スタイルや文言を微調整しました。
- 2019/10/04 初版