āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Base64 URL Safe: āļĄāļąāļāļāļ·āļāļāļ°āđāļĢāđāļĨāļ°āļāļģāđāļĄāļāļķāļāļŠāļģāļāļąāļ
āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL āļāļ·āļāļāļ°āđāļĢ?
āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL (āđāļĢāļĩāļĒāļāļāļĩāļāļāļĒāđāļēāļāļ§āđāļē Base64url) āđāļāđāļāļĢāļđāļāđāļāļāļĒāđāļāļĒāļāļāļ Base64 āļĄāļēāļāļĢāļāļēāļāļāļĩāđāđāļāļāļāļĩāđāļāļąāļāļāļĢāļ°āļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļŦāļĄāļēāļĒāļāļīāđāļĻāļĐāđāļ URL āđāļĨāļ°āļāļ·āđāļāđāļāļĨāđāļāđāļ§āļĒāļāļēāļāđāļĨāļ·āļāļāļāļĩāđāļāļĨāļāļāļ āļąāļĒ Base64 āļĄāļēāļāļĢāļāļēāļāđāļāđ + āđāļĨāļ° / āđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļāļāļļāļāļāļąāļāļāļĢāļ° 64 āļāļąāļ§ āļĢāļ§āļĄāļāļķāļ = āļŠāļģāļŦāļĢāļąāļ padding āđāļĨāļ°āļāļąāđāļāļŠāļēāļĄāļāļąāļ§āļĄāļĩāļāļąāļāļŦāļēāđāļ URL, query strings āđāļĨāļ°āļāļēāļāđāļāļĨāđ
Base64url āđāļāđāļāļąāļāļŦāļēāļāļĩāđāļāđāļ§āļĒāļāļēāļĢāđāļāļāļāļĩāđāļāđāļēāļĒāđ āļŠāļāļāļāļĒāđāļēāļ:
| Base64 āļĄāļēāļāļĢāļāļēāļ | Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL |
|-----------------|-----------------|
| + (āļāļ§āļ) | - (āļĨāļ) |
| / (āđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļąāļ) | _ (āļāļĩāļāļĨāđāļēāļ) |
| = (padding) | āļāļđāļāļĨāļ°āđāļ§āđ (āđāļāļĒāļāļāļāļī) |
āļāļģāđāļĄ Base64 āļĄāļēāļāļĢāļāļēāļāļāļģāđāļŦāđ URL āđāļŠāļĩāļĒāļŦāļēāļĒ
āđāļĄāļ·āđāļāļŠāļāļĢāļīāļāļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠ Base64 āļāļĩāđāļĄāļĩ + āļŦāļĢāļ·āļ / āļāļĢāļēāļāļāđāļ URL āļāļĪāļāļīāļāļĢāļĢāļĄāļāļāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđāđāļĨāļ°āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļ°āđāļĄāđāļŠāļēāļĄāļēāļĢāļāļāļēāļāđāļāļēāđāļāđ
āļāļąāļāļŦāļēāļāļāļ +
āđāļ URL query strings āļāļąāļāļāļĢāļ° + āļāļđāļāļāļĩāļāļ§āļēāļĄāđāļāđāļāļāđāļāļāļ§āđāļēāļ (space) āļāļĪāļāļīāļāļĢāļĢāļĄāļāļĩāđāļĄāļēāļāļēāļāļāđāļāļāļģāļŦāļāļ application/x-www-form-urlencoded āđāļĨāļ°āļāļģāđāļŦāđāļāđāļāļĄāļđāļĨāļāļĩāđāļāļāļāļĢāļŦāļąāļŠāļĄāļĩāļāđāļāļāļ§āđāļēāļāļāļĩāđāđāļĄāđāļāļēāļāļāļīāļ
āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āļŠāļāļĢāļīāļ Base64 āļāļĒāđāļēāļ Pj4+Pz8/Pw== āļĄāļĩāļāļąāļāļāļĢāļ° + āļŦāļēāļāļŠāļīāđāļāļāļĩāđāļāļĢāļēāļāļāđāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđ URL ?token=Pj4+Pz8/Pw== āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļ°āđāļŦāđāļ ?token=Pj4 Pz8/Pw== â + āļāļĨāļēāļĒāđāļāđāļāļāđāļāļāļ§āđāļēāļ
āļāļąāļāļŦāļēāļāļāļ /
āđāļ URL paths āļāļąāļāļāļĢāļ° / āđāļāđāļāļāļąāļ§āļāļąāđāļāļāļēāļ āļŠāļāļĢāļīāļ Base64 āļāļĒāđāļēāļ ab/CD+Ef== āļĄāļĩ / āļāļĩāđāļāļ°āļāļđāļāļāļĩāļāļ§āļēāļĄāđāļāđāļāļĢāļ°āļāļąāļāđāļāđāļĢāļāļāļāļĢāļĩ āļŦāļēāļāļŠāļīāđāļāļāļĩāđāļāļĢāļēāļāļāđāļāļŠāđāļ§āļāļāļāļ URL āļāļąāđāļāđāļāļĨāđāļāļāļāđāđāļĨāļ°āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļēāļāļāļĩāļāļ§āļēāļĄāđāļāļĢāļāļŠāļĢāđāļēāļāļāļīāļ
āļāļąāļāļŦāļēāļāļāļ =
āļāļąāļāļāļĢāļ° = āđāļāđāļŠāļģāļŦāļĢāļąāļāļāļđāđ key-value āđāļ query strings āđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒ = āļāļĩāđāļāđāļāļāđāļēāļĒāđāļ ?data=SGVsbG8= āļāļēāļāļāļĨāļļāļĄāđāļāļĢāļ·āļ â = āđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļ Base64 padding āļŦāļĢāļ·āļāđāļ§āļĒāļēāļāļĢāļāđāļāļāļ query parameter?
āđāļāļāļāļ°āļāļĩāđāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāđāļāļāļĢāđāđāļāđāļāļāđ (percent-encoding) āļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāļāļąāļāļŦāļēāđāļŦāļĨāđāļēāļāļĩāđāđāļāđ (+ āļāļĨāļēāļĒāđāļāđāļ %2B, / āļāļĨāļēāļĒāđāļāđāļ %2F) āļĄāļąāļāļāļģāđāļŦāđāļāļ§āļēāļĄāļĒāļēāļ§āļŠāļāļĢāļīāļāđāļāļīāđāļĄāļāļķāđāļāđāļĨāļ°āļāļģāđāļŦāđāļāļēāļĢāļāļĩāļāļąāļāļĒāļēāļāļāļķāđāļ Base64url āđāļāđāļāđāļāļĨāļđāļāļąāļāļāļĩāđāļŠāļ°āļāļēāļāļāļ§āđāļē
Base64url āļāļģāļāļēāļāļāļĒāđāļēāļāđāļĢ
Base64url āļāļđāļāļāļģāļŦāļāļāļāļĒāđāļēāļāđāļāđāļāļāļēāļāļāļēāļĢāđāļ RFC 4648 Section 5 āļĄāļąāļāđāļāđāļāļąāļĨāļāļāļĢāļīāļāļķāļĄāđāļāļĩāļĒāļ§āļāļąāļāļāļąāļ Base64 āļĄāļēāļāļĢāļāļēāļ â 3 āđāļāļāđāļāļĨāļēāļĒāđāļāđāļ 4 āļāļąāļāļāļĢāļ° â āđāļāđāļĄāļĩāļāļēāļĢāđāļāļāļāļĩāđāļāļąāļāļāļĢāļ°āļŦāļāļķāđāļāļāļąāļ§āļāļĩāđāļāļģāđāļŦāļāđāļ 62 āđāļĨāļ° 63 āļāļāļāļāļļāļāļāļąāļāļāļĢāļ°:
- āļāļąāļāļāļĩāļāļļāļāļāļąāļāļāļĢāļ° 62:
+â-(āļĨāļ) - āļāļąāļāļāļĩāļāļļāļāļāļąāļāļāļĢāļ° 63:
/â_(āļāļĩāļāļĨāđāļēāļ)
Padding (=) āļĄāļąāļāļāļđāļāļāļąāļāļāļāļ āđāļāļ·āđāļāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļāļāļļāļĄāļēāļāđāļāđāļāļēāļāļāļ§āļēāļĄāļĒāļēāļ§āļŠāļāļĢāļīāļāđāļĄāļ·āđāļāļāļāļāļĢāļŦāļąāļŠ āļŠāļāļĢāļīāļ Base64url āđāļāđāļāļŠāđāļ§āļāļāļĢāļ°āļāļāļ URL āļāļĩāđāļāļđāļāļāđāļāļāđāļŠāļĄāļāđāļāļĒāđāļĄāđāļāđāļāļ escape āđāļāļīāđāļĄāđāļāļīāļĄ
āļāđāļāļāđāļĨāļ°āļŦāļĨāļąāļ
āļāļĩāđāļāļ·āļāļŠāļīāđāļāļāļĩāđāļāđāļāļĄāļđāļĨāđāļāļāļēāļĢāļĩāđāļāļĩāļĒāļ§āļāļąāļāļāļđāđāļŦāļĄāļ·āļāļāđāļāļāļąāđāļāļŠāļāļāļĢāļđāļāđāļāļ:
Standard: Pj4+Pz8/Pw==
URL-safe: Pj4-Pz8_Pw
āļāļĩāđāļāļĩāđ Base64url āļāļđāļāđāļāđ
JSON Web Tokens (JWT)
JWT āđāļāđāļāļāļđāđāđāļāđ Base64url āļāļĩāđāđāļāļāđāļāđāļāļāļĩāđāļŠāļļāļ āļāļļāļ JWT āļāļĢāļ°āļāļāļāļāđāļ§āļĒāļŠāļēāļĄāļŠāđāļ§āļ â header, payload āđāļĨāļ° signature â āđāļāđāļĨāļ°āļŠāđāļ§āļāļāļđāļāđāļāđāļēāļĢāļŦāļąāļŠāļāđāļ§āļĒ Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL āđāļĨāļ°āļāļąāđāļāļāđāļ§āļĒāļāļļāļ:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0
āļŠāļąāļāđāļāļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļĩāļāđāļĨāļ°āļāļĩāļāļĨāđāļēāļ â āđāļĄāđāļĄāļĩāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļ§āļāļŦāļĢāļ·āļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļąāļ āļŦāļēāļ JWT āđāļāđ Base64 āļĄāļēāļāļĢāļāļēāļ āđāļāđāļāđāļāļāļ°āđāļŠāļĩāļĒāļŦāļēāļĒāđāļĄāļ·āđāļāļŠāđāļāļāđāļēāļāđāļāđāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđ URL āļāļķāđāļāđāļāđāļāļ§āļīāļāļĩāļāļĩāđāđāļāđāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāđāļ§āđāļāđāļāļāļāļĨāļīāđāļāļāļąāļ
OAuth āđāļĨāļ° OpenID Connect
āļāļąāđāļ OAuth 2.0 āđāļĨāļ° OpenID Connect āļāļķāđāļāļāļē JWT āļŠāļģāļŦāļĢāļąāļ access tokens āđāļĨāļ° ID tokens āļāļģāđāļŦāđāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Base64url āđāļāđāļāļāļ·āđāļāļāļēāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāļŠāļĄāļąāļĒāđāļŦāļĄāđ authorization code flow, implicit flow āđāļĨāļ° client credentials flow āļāđāļēāļāļāđāļŠāđāļāđāļāđāļāđāļāļāļĩāđāđāļāđ Base64url
Web API āđāļĨāļ° Query Parameters
REST āđāļĨāļ° GraphQL API āļāļģāļāļ§āļāļĄāļēāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠ Base64 āđāļ query parameters āļŠāļģāļŦāļĢāļąāļ pagination cursors, āļāļąāļ§āļāļĢāļāļ āļŦāļĢāļ·āļ payload āļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠ Base64url āļāļģāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāđāļŦāļĨāđāļēāļāļĩāđāļāļģāļāļēāļāđāļāđāļāļĒāđāļēāļāļāļđāļāļāđāļāļāđāļāļĒāđāļĄāđāļāđāļāļāđāļāđāļēāļĢāļŦāļąāļŠ URL āđāļāļīāđāļĄāđāļāļīāļĄ
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļāđāļĨāļāļāļĢāļīāļ â API cursor pagination:
GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo
GitHub's API āđāļāđāļĢāļđāļāđāļāļāļāļĩāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļāļŦāļāđāļēāļāļļāļāļāļĨāļĨāļąāļāļāđāļāļāļēāļāđāļŦāļāđ
āļāļ·āđāļāđāļāļĨāđāđāļĨāļ°āļāļēāļĢāļāļąāļāđāļāđāļāđāļāļĨāđ
āļŠāļāļĢāļīāļ Base64url āđāļāđāļāļāļ·āđāļāđāļāļĨāđāļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļāļĢāļēāļ°āđāļĄāđāļĄāļĩāļāļąāļ§āļāļąāđāļāļāļēāļ (/), āđāļĄāđāļĄāļĩāļāļąāļāļāļĢāļ°āļāļīāđāļĻāļĐāļāļĩāđāļāļģāđāļŦāđāļĢāļ°āļāļāđāļāļĨāđāļŠāļąāļāļŠāļ āđāļĨāļ°āđāļĄāđāļĄāļĩāļāļąāļāļāļĢāļ°āļāļĩāđāđāļĄāđāļāļđāļāļāđāļāļāļāļ Windows (:, *, ? āļŊāļĨāļŊ)
Content Delivery Networks āđāļĨāļ° Cache Keys
CDN āđāļĨāļ°āļāļąāđāļāđāļāļāļĄāļąāļāđāļāđāļāđāļēāļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠ Base64url āđāļāđāļ cache keys Base64 āļĄāļēāļāļĢāļāļēāļāļāļĩāđāļĄāļĩ / āļāļ°āļŠāļĢāđāļēāļāļĨāļģāļāļąāļāļāļąāđāļāđāļāđāļĢāļāļāļāļĢāļĩāļāļĨāļāļĄāđāļ namespace āļāļāļāđāļāļ āļāļģāđāļāļŠāļđāđ keys āļāļĩāđāļāļĨāļļāļĄāđāļāļĢāļ·āļ
āļāļēāļĢāđāļāļĨāļāļĢāļ°āļŦāļ§āđāļēāļ Base64 āļĄāļēāļāļĢāļāļēāļāđāļĨāļ° Base64url
āļāļēāļĢāđāļāļĨāļāļĢāļ°āļŦāļ§āđāļēāļāļŠāļāļāļĢāļđāļāđāļāļāļĒāđāļāļĒāļāļąāđāļāļāļĢāļāđāļāļāļĢāļāļĄāļēāđāļāļāļļāļāļ āļēāļĐāļē:
JavaScript
// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
// Restore padding
while (result.length % 4) {
result += '=';
}
return result;
}
Node.js
Node.js āļĢāļāļāļĢāļąāļ Base64url āđāļāļĒāļāļĢāļāļāļąāđāļāđāļāđāđāļ§āļāļĢāđāļāļąāļ 15.7.0:
// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ
// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!
Python
import base64
# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==
# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!
āđāļĄāļ·āđāļāđāļāļāļ§āļĢāđāļāđ Base64 āļĄāļēāļāļĢāļāļēāļ āđāļāļĩāļĒāļāļāļąāļ Base64url
āđāļāđ Base64 āļĄāļēāļāļĢāļāļēāļāđāļĄāļ·āđāļ:
- āđāļāđāļēāļĢāļŦāļąāļŠāđāļāļĨāđāđāļāļāļāļĩāđāļĄāļĨ (āļĄāļēāļāļĢāļāļēāļ MIME āļāđāļāļāļāļēāļĢ)
- āļŠāļĢāđāļēāļ data URLs āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļąāļāđāļ HTML/CSS
- āļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāđāļāļāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļāļ URL āđāļĄāđāđāļāļĩāđāļĒāļ§āļāđāļāļ
- āđāļāđāļāļāļāļāļąāļāļĢāļ°āļāļāđāļāđāļēāļāļĩāđāļāļēāļāļŦāļ§āļąāļ Base64 āļĄāļēāļāļĢāļāļēāļ
āđāļāđ Base64url āđāļĄāļ·āđāļ:
- āļŠāļĢāđāļēāļāļŦāļĢāļ·āļ parse JWT tokens
- āļŠāđāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠāđāļ URL query parameters āļŦāļĢāļ·āļ path segments
- āļŠāļĢāđāļēāļāļāļ·āđāļāđāļāļĨāđāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļāļēāļĢāļĩ
- āļŠāļĢāđāļēāļ cache keys āļŦāļĢāļ·āļ identifiers
- āļāļģāļāļēāļāļāļąāļ OAuth tokens āļŦāļĢāļ·āļ OpenID Connect
āļĨāļāļāđāļāđāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL āļāļāļāđāļĨāļāđ
āđāļāđ āđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļāđāļēāļĢāļŦāļąāļŠāđāļĨāļ°āļāļāļāļĢāļŦāļąāļŠ Base64 āļāļāļāđāļĨāļāđāļāļĢāļĩ āđāļāļ·āđāļāđāļāļĨāļāļĢāļ°āļŦāļ§āđāļēāļāļĢāļđāļāđāļāļ Base64 āļĄāļēāļāļĢāļāļēāļāđāļĨāļ° Base64 āđāļāļāļāļĨāļāļāļ āļąāļĒāļŠāļģāļŦāļĢāļąāļ URL āļ§āļēāļāļāđāļāļĄāļđāļĨāļāļāļāļāļļāļ āđāļĨāļ·āļāļāļĢāļđāļāđāļāļāļĒāđāļāļĒāļāļĩāđāļāđāļāļāļāļēāļĢ āđāļĨāļ°āļĢāļąāļāļāļĨāļĨāļąāļāļāđāļāļąāļāļāļĩ