1.

URLとは|スキーム・ホスト・パスの構造とURIの違い・エンコード

編集
この記事の要点
  • URL(Uniform Resource Locator)はインターネット上のリソース(Web ページ / 画像 / API 等)の場所を一意に指すアドレス
  • 基本構造は スキーム://ホスト[:ポート]/パス[?クエリ][#フラグメント] の 5 要素
  • スキームは http / https / ftp / mailto / file など、通信プロトコルや扱い方を表す
  • URI(識別子全般)の一部に URL(場所を示す URI)と URN(名前を示す URI)がある
  • マルチバイト文字や記号はパーセントエンコーディングで ASCII に変換して送信される

URL とは

URLUniform Resource Locator)は、インターネット上に公開されているリソース(Web ページ、画像、API、ファイル等)の「場所」を一意に特定するためのアドレスです。日本語では 統一資源位置指定子 と訳されます。

Web ブラウザのアドレスバーに表示される https://example.com/path?id=1 のような文字列が URL です。ブラウザはこの URL を解釈してサーバへリクエストを送り、レスポンスとして HTML や JSON などを受け取ります。

URL の構造

URL は次の 5 つの部品から構成されます。

https://www.example.com:443/products/item?id=123&color=red#description
└──┬─┘   └──────┬──────┘ └┬┘└─────┬──────┘└─────┬───────┘└────┬────┘
  scheme       host      port    path          query        fragment
要素説明
スキーム
(scheme)
通信方式 / プロトコルhttp https ftp mailto file
ホスト
(host)
サーバのドメイン名 or IP アドレスwww.example.com
ポート
(port)
サーバ上の入口番号(省略可):80(HTTP 既定)
:443(HTTPS 既定)
パス
(path)
サーバ内のリソースの位置/products/item
クエリ
(query)
追加情報。? で始まり key=value&key=value 形式?id=123&color=red
フラグメント
(fragment)
ページ内の特定位置。# で始まる#description

主なスキーム

スキーム用途
http暗号化なしの Web 通信http://example.com/
httpsTLS で暗号化された Web 通信(現在の標準)https://example.com/
ftpファイル転送ftp://files.example.com/
mailtoメール送信。クリックでメーラ起動mailto:info@example.com
tel電話発信tel:+81-3-1234-5678
fileローカルファイルfile:///C:/data/index.html
dataURL 内にデータを埋め込むdata:image/png;base64,iVBOR...

URL / URI / URN の関係

厳密に言うと、リソースを識別する文字列の総称が URI(Uniform Resource Identifier)です。その中で「場所で識別するもの」が URL、「名前で識別するもの」が URN です。

名称意味
URI識別子の総称(URL + URN)URL も URN も URI
URL場所で識別する URIhttps://example.com/foo
URN名前で識別する URIurn:isbn:0451450523

実務ではほとんどの場面で URL を扱うため、URL と URI を区別せずに使うことも多いです。

絶対 URL と相対 URL

HTML の hrefsrc では、フルアドレスを書く絶対 URLと、現在のページからの相対位置で書く相対 URLのどちらも使えます。

<!-- 絶対 URL -->
<a href="https://example.com/products/item.html">商品</a>

<!-- ルート相対 -->
<a href="/products/item.html">商品</a>

<!-- 現在地相対 -->
<a href="item.html">商品</a>
<a href="../about.html">about</a>

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

URL は ASCII 印字可能文字以外を扱えないため、日本語や記号(スペース・?& 等)は % + 16 進 2 桁にエンコードして送ります。これをパーセントエンコーディング(URL エンコード)と呼びます。

"検索"  → "%E6%A4%9C%E7%B4%A2"   (UTF-8 で 3 バイト × 2 文字)
" "    → "%20" または "+"(クエリ中のみ)
"&"    → "%26"
"#"    → "%23"
"?"    → "%3F"
"/"    → "%2F"

JavaScript なら encodeURIComponent("検索")、PHP なら urlencode()、Python なら urllib.parse.quote() でエンコードできます。

URL の長さの限界

環境実質的な上限
RFC 7230 / HTTP/1.1 仕様明確な上限なし(実装依存)
主要ブラウザ概ね 2,000 〜 8,000 文字
Apache の LimitRequestLine既定 8,190 バイト
Internet Explorer(歴史的)2,083 文字

安全側に倒すなら 2,000 文字以内に収めるのが慣例です。これを超える長さのデータを送る必要があるときは GET ではなく POST を使います。

URL の良い設計

  • 短く意味のあるパス(例: /products/123 > /p.php?id=123
  • 小文字を使う(大文字小文字を区別するサーバがある)
  • 単語区切りは ハイフン -(アンダーバー _ より検索エンジンに優しい)
  • セッション ID や個人情報をクエリに乗せない(リファラやアクセスログに残る)
  • HTTPS を使う

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません

最近更新/作成されたページ