121 votes

Un signe deux-points est sans danger pour l’environnement-URL ?

Nous travaillons à la conception d'un système d'URL qui permettra de préciser l'application des sections comme des mots séparés par des barres obliques. Plus précisément, c'est dans GWT, de sorte que les parties pertinentes de l'URL sera dans la table de hachage (qui sera interprété par un contrôleur de la couche sur le côté client):

http://site/gwturl#section1/section2

Certaines sections peuvent avoir besoin de plus d'attributs, ce qui nous tiens à préciser avec un :, de sorte que la section des pièces de l'URL sont sans ambiguïté. Le code se divise en premier sur /, puis sur :, comme ceci:

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

Bien sûr, nous le faisons pour l'url de la convivialité, nous aimerions donc assurez-vous qu'aucun de ces personnages qui auront une signification particulière sera url-encodé par les navigateurs, ou tout autre système, et à la fin avec une url comme ceci:

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

Est l'aide de l'côlon de cette façon sécuritaire (par qui je veux dire n'est pas automatiquement codé) pour les navigateurs, systèmes de signets, même Javascript ou Java code?

90voto

McDowell Points 62645

J'ai récemment écrit une URL codeur, donc c'est plutôt frais dans mon esprit.

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

Tous les personnages dans le fragment de la partie (user:45/comments) sont tout à fait légal pour la RFC 3986 Uri.

Les parties pertinentes de l' ABNF:

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

En dehors de ces restrictions, le fragment de la partie n'a pas de structure définie au-delà de celle de votre application. Le régime, http, seulement dit que vous n'envoyez pas cette partie sur le serveur.


EDIT:

Oh pinaise!

Malgré mes affirmations sur l'URI spec, irreputable fournit la bonne réponse quand il souligne que la spécification HTML 4 limite les noms d'élément/identifiants.

Notez que l'identificateur de règles sont en train de changer dans le HTML 5. URI restrictions continuent de s'appliquer (au moment de l'écriture, il y a quelques questions en suspens autour de HTML 5 de l'utilisation d'Uri).

76voto

Paul Wray Points 31

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

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

64voto

irreputable Points 25577

En plus de McDowell analyse de l'URI standard, rappelez-vous aussi que le fragment doit être valide HTML nom de l'ancre. Selon http://www.w3.org/TR/html4/types.html#type-name

L'ID et le NOM de jetons doit commencer par une lettre ([A-Za-z]) et peut être suivi par un nombre quelconque de lettres, de chiffres ([0-9]), des tirets ("-"), des traits de soulignement ("_"), deux-points (":"), et des périodes de (".").

Si vous avez de la chance. le ":" est explicitement autorisé. Et personne ne devrait "%"-s'en échapper, pas seulement parce que "%" est illégal char là, mais aussi parce que le fragment correspondre nom de l'ancre de char par char, donc aucun agent doit essayer de tempérer avec eux de toute façon.

Cependant, vous devez le tester. Les standards du Web ne sont pas strictement suivies, parfois, les normes sont contradictoires. Par exemple HTTP/1.1 RFC 2616 ne permet pas de chaîne de requête dans l'URL de la requête, tandis que le HTML constructions un lors de la soumission d'un formulaire avec la méthode GET. Selon la mise en œuvre dans le monde réel gagne à la fin de la journée.

9voto

Asaph Points 56989

Je ne compterais pas sur elle. Il obtiendrez probablement url codée comme `` par plusieurs agents utilisateurs.

4voto

kprobst Points 8360

Je ne vois pas Firefox ou IE8 codage certains des Wikipedia URL qui inclut le caractère.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X