Visual RFC.
ALL RFCs / RFC 3986
Read the RFC ↗
RFC 3986 / COMPARISON

Normalize only what is safe

05

Different strings can identify the same resource, but generic normalization has limits.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

DIAGRAM§ 6.2 ↗
RFC 3986 · § 6.2EXAMPLE
4 / 4
Normalize only what is safeA concrete URI changes through case, percent-encoding, and scheme-based normalization while preserving path case.Normalize in small, defined stepsHTTP://EXAMPLE.ORG:80/%7eAdaoriginal spellinghttp://example.org:80/%7eAdascheme + host casehttp://example.org:80/~Adaunreserved tildehttp://example.org/~AdaHTTP default portThe path’s uppercase A survives every step.
04
Remove HTTP’s default port.

The resulting example is http://example.org/~Ada.

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
KEY POINT

Do not lowercase an entire URI.

  • Scheme and host are case-insensitive; other components are generally case-sensitive unless the scheme says otherwise.
  • Hexadecimal digits in percent encodings can be uppercased, and encoded unreserved characters can be decoded.
  • Removing a default port is scheme-based normalization, not a universal port rule.
DETAILS

The examples simplify the wire representation. Follow the linked specification and application profile for implementation.

Read the RFC section ↗

Diagrams simplify the RFC. Read the linked sections for complete requirements.

Privacy
All chapters in this RFC
  1. The five URI components
  2. Escape data, preserve delimiters
  3. Resolve a relative reference
  4. Authority has its own structure
  5. Normalize only what is safe
  6. An identifier can mislead
RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗