web-dev-qa-db-fra.com

Des espaces dans les URL?

w3fools affirme que les URL peuvent contenir des espaces: http://w3fools.com/#html_urlencode

Est-ce vrai? Comment une URL peut-elle contenir un espace non codé?

J'ai l'impression que la ligne de requête d'une requête HTTP utilise un espace comme délimiteur, elle est donc formatée en tant que {the method}{space}{the path}{space}{the protocol}:

GET /index.html http/1.1

Par conséquent, comment une URL peut-elle contenir un espace? Si tel est le cas, d'où vient la pratique consistant à remplacer des espaces par + viens de?

60
Richard JP Le Guen

Une URL ne doit pas contenir d'espace littéral. Il doit être encodé à l'aide de encodage en pourcentage ou d'un autre encodage utilisant caractères sécurisés pour les URL (comme )./x-www-form-urlencoded utilisant + au lieu de %20 pour les espaces).

Mais que l’énoncé soit vrai ou faux dépend de l’interprétation: Syntaxiquement, un URI ne doit pas contenir d’espace littéral et doit être codé; sémantiquement, un %20 n'est pas un espace (évidemment) mais il représente un espace.

89
Gumbo

Ils sont en effet des imbéciles. Si vous regardez RFC 3986 Annexe A, vous verrez que "l'espace" n'est tout simplement pas mentionné nulle part dans la grammaire pour définir une URL. Comme il n’est mentionné nulle part dans la grammaire, le seul moyen de coder un espace est le codage en pourcentage (%20).

En fait, le RFC déclare même que les espaces sont des délimiteurs et doivent être ignorés:

Dans certains cas, il peut être nécessaire d'ajouter des espaces supplémentaires (espaces, sauts de ligne, tabulations, etc.) pour découper un long URI sur plusieurs lignes. Les espaces doivent être ignorés lors de l'extraction de l'URI.

et

Pour des raisons de robustesse, les logiciels acceptant les URI de type utilisateur doivent tenter de reconnaître et de supprimer les délimiteurs et les espaces blancs incorporés.

Curieusement, l'utilisation de + en tant que codage pour l'espace n'est pas mentionné dans le RFC, bien qu'il soit réservé en tant que sous-délimètre. Je soupçonne que son utilisation est soit conventionnelle, soit couverte par une autre RFC (éventuellement HTTP).

17
Gabe

Les espaces sont simplement remplacés par "% 20" comme ceci:

http://www.example.com/my%20beautiful%20page

3
Sandro Munda

Je pense que les informations sont partiellement correctes:

Ce n'est pas vrai. Une URL peut utiliser des espaces. Rien ne définit qu'un espace est remplacé par un signe +.

Comme vous l'avez noté, une URL ne peut PAS utiliser d'espaces. La requête HTTP se ferait avoir. Je ne sais pas où le + est défini, bien que %20 est la norme.

1
orlp