web-dev-qa-db-fra.com

Une URL avec // dans la section de chemin est-elle valide?

J'ai une question concernant les URL:

J'ai lu le RFC 3986 et j'ai toujours une question sur une URL:

Si un URI contient un composant d'autorité, le composant de chemin d'accès
doit être vide ou commencer par une barre oblique ("/"). Si un URI ne contient pas de composant d'autorité, le chemin ne peut pas commencer
avec deux barres obliques ("//"). De plus, une référence URI
(Section 4.1) peut être une référence de chemin relatif, auquel cas le
le premier segment de chemin ne peut pas contenir de deux-points (":"). L'ABNF
nécessite cinq règles distinctes pour lever l'ambiguïté de ces cas, dont un seul correspondra à la sous-chaîne de chemin dans une référence URI donnée. Nous utilisons le terme générique "composant de chemin" pour décrire la sous-chaîne URI
correspondant à l'analyseur à l'une de ces règles.

Je le sais //server.com:80/path/info est valide (il s'agit d'une URL relative au schéma)

Je sais aussi que http://server.com:80/path//info est valable.

Mais je ne sais pas si la suivante est valide:

http://server.com:80//path/info

Le problème derrière ma question est qu'un cookie n'est pas envoyé à http://server.com:80//path/info, lorsqu'il est créé par l'URI http://server.com:80/path/info avec restriction à /path

36
Christian Kuetbach

Voir RL avec plusieurs barres obliques, cela casse-t-il quelque chose? , Y a-t-il des inconvénients à utiliser des doubles barres obliques dans les URL? , Que signifie la double barre oblique dans les URL? et RFC 3986 - Uniform Resource Identifier (URI): syntaxe générique .

Consensus: les navigateurs feront la demande telle quelle, ils ne modifieront pas la demande. Le / le caractère est le séparateur de chemin, mais comme les segments de chemin sont définis comme:

path-abempty  = *( "/" segment )
segment       = *pchar

Signifie la barre oblique après http://example.com/ peut être directement suivi d'une autre barre oblique, à l'infini. Les serveurs peuvent l'ignorer, mais pas les navigateurs, comme vous l'avez compris.

La phrase:

Si un URI ne contient pas de composant d'autorité, le chemin ne peut pas commencer par deux barres obliques ("//").

Permet RL relatives au protocole , mais indique spécifiquement dans ce cas aucune autorité (server.com:80 dans votre exemple) peut être présent.

Donc: oui, c'est valable, non, ne l'utilisez pas.

37
CodeCaster