Est-ce qu’un deux-points `:` est sûr pour l’utilisation d’URL conviviale?

Nous concevons un système d’URL qui spécifiera les sections de l’application sous forme de mots séparés par des barres obliques. Plus précisément, cela se trouve dans GWT, donc les parties pertinentes de l’URL seront dans le hachage (qui sera interprété par une couche de contrôleur côté client):

http://site/gwturl#section1/section2 

Certaines sections peuvent nécessiter des atsortingbuts supplémentaires, que nous aimerions spécifier avec un : afin que les sections de l’URL ne soient pas ambiguës. Le code serait d’abord divisé sur / , puis sur : comme ceci:

 http://site/gwturl#user:45/comments 

Bien sûr, nous le faisons pour la convivialité des URL, nous aimerions donc nous assurer qu’aucun de ces caractères, qui auront une signification particulière, ne sera encodé en url par les navigateurs, ou tout autre système, et se retrouvera avec une URL comme celle-ci. ce:

 http://site/gwturl#user%3A45/comments <--- BAD 

Est-ce que l’utilisation des deux-points de cette manière (par ce que je veux dire ne sera pas automatiquement encodée) pour les navigateurs, les systèmes de bookmarking, même le code Javascript ou Java?

J’ai récemment écrit un encodeur d’URL, donc c’est assez frais dans mon esprit.

http://site/gwturl#user:45/comments

Tous les caractères de la partie fragment ( user:45/comments ) sont parfaitement légaux pour les URI RFC 3986 .

Les parties pertinentes de l’ ABNF :

 fragment = *( pchar / "/" / "?" ) pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" 

Outre ces ressortingctions, la partie fragment ne possède pas de structure définie au-delà de celle que votre application lui atsortingbue. Le schéma, http, indique uniquement que vous n’envoyez pas cette partie sur le serveur.


MODIFIER:

D’oh!

Malgré mes affirmations sur la spécification de l’URI, la réponse irréfutable est correcte lorsqu’il fait remarquer que la spécification HTML 4 restreint les noms / identificateurs d’éléments .

Notez que les règles d’identifiant changent dans HTML 5 . Les ressortingctions d’URI continueront à s’appliquer (au moment de la rédaction, il existe des problèmes non résolus concernant l’utilisation des URI HTML 5).

En plus de l’parsing de McDowell sur la norme URI, n’oubliez pas que le fragment doit être un nom d’ancrage HTML valide. Selon http://www.w3.org/TR/html4/types.html#type-name

Les jetons ID et NAME doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis d’un nombre quelconque de lettres, de chiffres ([0-9]), de tirets (“-“), de traits de soulignement (“_”) , les deux-points (“:”) et les points (“.”).

Donc, vous avez de la chance. “:” est explicitement autorisé. Et personne ne devrait “%” – ne pas y échapper, non seulement parce que “%” est illégal, mais aussi parce que fragment correspond beaucoup au nom de l’ancre char-by-char, donc aucun agent ne devrait essayer de les tempérer de toute façon.

Cependant, vous devez le tester. Les normes Web ne sont pas ssortingctement respectées, parfois les normes sont contradictoires. Par exemple, HTTP / 1.1 RFC 2616 n’autorise pas la chaîne de requête dans l’URL de la demande, tandis que HTML en construit une lors de la soumission d’un formulaire avec la méthode GET. Celui qui est implémenté dans le monde réel gagne à la fin de la journée.

MediaWiki et les autres moteurs de wiki utilisent des deux-points dans leurs URL pour désigner les espaces de noms, apparemment sans problèmes majeurs.

par exemple http://en.wikipedia.org/wiki/Template:Welcome

Je n’y compte pas. Il est probable que de nombreux agents utilisateurs encoderont l’URL %3A .

De URLEncoder javadoc:

Pour plus d’informations sur l’encodage des formulaires HTML, consultez la spécification HTML.

Lors du codage d’une chaîne, les règles suivantes s’appliquent:

  • Les caractères alphanumériques “a” à “z”, “A” à “Z” et “0” à “9” restnt les mêmes.
  • Les caractères spéciaux “.”, “-“, “*” et “_” restnt les mêmes.
  • Le caractère d’espace “” est converti en un signe plus “+”.
  • Tous les autres caractères sont dangereux et sont d’abord convertis en un ou plusieurs octets en utilisant un schéma de codage. Ensuite, chaque octet est représenté par la chaîne de 3 caractères “% xy”, où xy est la représentation hexadécimale à deux chiffres de l’octet. Le schéma d’encodage recommandé à utiliser est UTF-8. Cependant, pour des raisons de compatibilité, si un codage n’est pas spécifié, le codage par défaut de la plate-forme est utilisé.

C’est-à-dire : n’est pas sûr.

Je ne vois pas Firefox ou IE8 encoder certaines des URL Wikipedia qui incluent le caractère.

Les colons sont utilisés pour séparer le nom d’utilisateur et le mot de passe si un protocole requirejs une authentification.

Colon n’est pas en sécurité. Vois ici

Ce n’est pas un caractère sûr et est utilisé pour distinguer à quel port vous vous connectez quand il se trouve juste après votre nom de domaine