139 votes

URLs peuvent comporter un espace en eux ?

URI (plus précisément l’URL HTTP) n’est autorisés à avoir un espace en eux ? Si elles doivent être codées, est « + » qu’une convention couramment suivie, ou une alternative légitime ? Merci !

EDIT : Est-ce quelqu'un peut pointer vers un RFC indiquant qu’une URL avec un espace doit être codé ?

Joe

107voto

Marc Novakowski Points 22611

Conformément à la RFC 1738:

Dangereux:

Les caractères peuvent être dangereux pour un certain nombre de raisons. L'espace personnage est dangereux parce que d'importants espaces peuvent disparaître et insignifiant espaces peuvent être introduits lors de l'Url sont transcrits ou typeset ou soumis à un traitement de programmes de traitement de texte. Les caractères "<" et ">" sont dangereux parce qu'ils sont utilisés comme délimiteurs autour des Url en texte libre; le guillemet (""") est utilisé pour délimiter les Url dans certains systèmes. Le caractère "#" est dangereux et doit toujours être codé car il est utilisé dans le World Wide Web et dans d'autres les systèmes de délimiter une URL à partir d'un fragment de l'ancre, de l'identificateur qui pourrait la suivre. Le caractère "%" est dangereux, car il est utilisé pour les codages des caractères d'autres. Les autres personnages sont dangereux parce que les les passerelles et autres agents de transport sont connus pour parfois modifier de tels caractères. Ces caractères sont "{", "}", "|", "\", "^", "~", "[", "]", et "`".

Tous les caractères non sécurisées doivent toujours être codées à l'intérieur d'une URL. Pour exemple, le caractère "#" doit être codé dans les Url, même dans les systèmes qui ne traitent généralement pas avec fragment d'ancrage ou de les identificateurs, de sorte que si l'URL est copié dans un autre système ne les utilisez, il ne sera pas nécessaire de changer l'encodage d'URL.

44voto

Julien Points 2256

Pourquoi a-t-elle codée? Une demande ressemble à ceci:

GET /url HTTP/1.1
(Ignoring headers)

Il y a 3 champs séparés par un espace blanc. Si vous mettez un espace dans votre url:

GET /url end_url HTTP/1.1

Vous savez qu'elles ont 4 champs, le serveur HTTP vous dira que c'est une demande non valide.

GET /url%20end_url HTTP/1.1

3 champs => valide

Remarque: dans la chaîne de requête (après ?), un espace est généralement codée sous la forme a +

GET /url?var=foo+bar HTTP/1.1

plutôt que de

GET /url?var=foo%20bar HTTP/1.1

41voto

Peter Hilton Points 10580

Réponse courte : Non, vous devez coder un espace ; Il est correct d’encoder un espace comme , mais seulement dans la chaîne de requête ; dans le chemin d’accès, vous devez utiliser .

9voto

Rob Williams Points 6316

Les url sont définis dans la RFC 3986, bien que d'autres Rfc sont concernés en tant que bien, mais la RFC 1738 est obsolète.

Ils ne peuvent pas être séparés par des espaces, ainsi que de nombreux autres personnages. Depuis de caractères interdits ont souvent besoin d'être représenté d'une certaine manière, il y a un schéma de codage dans une URL en les traduisant à leur hexadécimal ASCII équivalent avec un "%" préfixe.

La plupart des langages de programmation/plates-formes offrent des fonctions pour l'encodage et le décodage de l'Url, si elles ne sont pas correctement respecter les standards RFC. Par exemple, je sais que PHP ne fonctionne pas.

5voto

Julian Reschke Points 12698
<blockquote> <p>Quelqu'un peut-il indiquer à une RFC indiquant qu’une URL avec un espace doit être codée ?</p> </blockquote> <p>URIs et donc des URL, sont définis dans RFC 3986.</p> <p>Si vous regardez la grammaire définie là-bas vous sera éventuellement noter qu’un caractère d’espace jamais peut faire partie d’une URL syntaxiquement légale, donc le terme « URL avec un espace » est une contradiction en soi.</p>

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