¿Por qué están reservados los caracteres reservados RFC 3986?

RFC 3986 clasifica todos los caracteres reservados como delimitadores y subdelimitadores. Todos los personajes sobre los que está preguntando pertenecen a la última categoría, y la especulación de William está respaldada por el propio RFC:

El propósito de los caracteres reservados es proporcionar un conjunto de caracteres delimitadores que se puedan distinguir de otros datos dentro de un URI. Los URI que difieren en el reemplazo de un carácter reservado con su correspondiente octeto codificado en porcentaje no son equivalentes. La codificación porcentual de un carácter reservado, o la decodificación de un octeto codificado porcentual que corresponde a un carácter reservado, cambiará la forma en que la mayoría de las aplicaciones interpretan el URI. Por lo tanto, los caracteres en el conjunto reservado están protegidos de la normalización y, por lo tanto, son seguros para ser utilizados por algoritmos específicos del esquema y del productor para delimitar subcomponentes de datos dentro de un URI.

(RFC 3986, sección 2.2)

En otras palabras, estos caracteres se reservan para que haya una variedad suficiente de delimitadores para que los futuros esquemas de URI puedan usar.

Tal como están las cosas, algunos de sus “personajes misteriosos” ya están en uso:

  • El signo de exclamación se utiliza en los URI de archivos Java para delimitar la URL del archivo JAR y separarlo de la referencia de entrada opcional: jar:!/[]
  • El punto y coma y la coma se usan para separar atributos en casi cualquier parte del URI (por ejemplo, pop3 [código] POP3: // [ [; AUTH = ] @] [: ] [ / code] y etiqueta la etiqueta de URI tag:,: )