レッスン 4

URL と data URI における Base64

標準 vs URL-safe 方言と `data:` スキームの使い方。

URL、クエリ文字列、Cookie 近傍チャネルは +/ を扱いにくく — = パディングは雑な連結ロジックと相性が悪い。専用 Base64URL 方言はエスケープ需要を減らすためアルファベットを並べ替えます。

このレッスンは MIME Base64RFC 4648 URL-safe、実用的な data: パターンを分けます。

標準 vs URL-safe アルファベット

古典 Base64 は 62 → '+'63 → '/'

URL-safe 実装(通称 base64url)は通常:

  • +' → '-' に再マップ
  • /' → '_' に再マップ
  • 従う仕様で許されるときパディング省略(JWT の JWS はセグメントにパディングなし base64url)

方言を変換なしでエンコーダーとデコーダーを混在させない。+// で生成したトークンは、percent-encode かアルファベットを一貫して切り替えない限りパスセグメントに貼ると壊れます。

percent-encoding は依然発生

URL-safe Base64 でも厳格 URL パーサーコンテキストではエンコードが必要な文字があり得ます — ハイフンとアンダースコアは plus と slash よりマシですが、層ルールを完全には消しません。生 payload を脆い文字列テンプレートで囲むより、型付きビルダー API(URLSearchParams、フレームワークヘルパー)で URL を組み立ててください。

JWT クイック確認

学習目的の手動デコードは問題ありません — JWT header/payload は JSON UTF-8 バイト → パディングなし base64url です。+ が見えたら PEM や MIME 出力を見ている可能性があります。

data: URI

小さなアセットをインライン埋め込み:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

構成:

部分意味
MIME タイプヒントブラウザがバイトを解釈する助け
;base64, センチネル続くものが Base64 エンコードバイト
payload連結された(しばしば長い)ASCII チャンク

利点: プロトタイピング中の極小アイコンで HTTP リクエスト削減。

欠点:

  • スタイルシートバンドル効率とは別キャッシュ
  • HTML/CSS ソースを急激に肥大(gzip 前に約 33% 膨張)
  • CSP やメールクライアントが禁止する場合

本番はハッシュ付き静的ファイル/CDN を好むことが多い — Base64 が失敗するからではなく、エンジニアリングトレードオフがキャッシュと分離を favor するから。

非常に大きな payload

巨大 data: URI はエディタ性能と DOM メモリを悪化させます。Web プラットフォームでは大バイナリにストリーム、blob、object URL(URL.createObjectURL)が適します。

要点

URL コンテキストは 文字セットの扱いやすさパディングの人間工学 の 2 軸に圧力をかけます。仕様が要求する variant(JWT vs PEM vs MIME)を選び、エッジバイトを忘れる ad hoc 文字列置換ではなく実績あるライブラリで変換を通してください。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る