web-dev-qa-db-fra.com

Peut-on utiliser une barre oblique exprimée en pourcentage pour désigner une barre oblique dans un nom de fichier sur un serveur Web?

Si je comprends bien, les caractères de l’URL sont soit réservé (ont une signification spéciale) ou non réservé (n’ont pas de signification spéciale).

Ai-je raison de dire que le codage en pourcentage est utilisé dans l'URL si l'on doit envoyer une valeur littérale de caractère au serveur Web? Par exemple, si j'ai un document nommé document/_with_forward_slash_in_its_name.html dans le dossier racine du serveur Web, je devrais alors utiliser l'URL www.example.com/document%2f_with_forward_slash_in_its_name.html, sinon le serveur Web penserait que je cherche un fichier nommé _with_forward_slash_in_its_name.html dans le répertoire document?

Existe-t-il une différence si ce caractère / est dans la chaîne de requête, par exemple http://www.example.com/get-page.php?home=document/_with_forward_slash_in_its_name.html?

Pourquoi il existe plusieurs façons de décoder les caractères réservés, par exemple / peut être %2F, %2f ou %c0%af?

1
Martin

Bien que plusieurs systèmes de fichiers, tels que le système de fichiers HFS de MacOS, acceptent une barre oblique dans un nom de fichier (/ ou \)), ils sont généralement considérés comme caractères réservés systèmes de fichiers populaires, et surtout sur les systèmes de fichiers généralement utilisés dans le commerce en tant que serveurs Web (Windows/Linux). Par conséquent, bien que vous deviez respecter les limitations du système de fichiers de votre serveur de déploiement prévu, pour des raisons de bonnes pratiques et dans un souci de compatibilité, vous devez également respecter les limitations communes ou typiques du système de fichiers afin de garantir une transition sans heurt si vos besoins en hébergement et changement de l'environnement à l'avenir.

Le principe du codage d'URL (ce que vous appelez le codage en pourcentage) est la méthode qui consiste à utiliser la syntaxe correcte dans l'URL afin que des caractères spéciaux puissent être envoyés dans l'URL sans en casser la validité. Un meilleur exemple aurait été pour les noms de fichiers contenant un caractère d'espacement, par exemple, my file.html deviendrait my+file.html car une URL valide ne peut pas comporter de caractère d'espacement.

Il n'y a pas plusieurs façons d'encoder ou de décoder les caractères réservés. %2F et %2f sont identiques, sans distinction de casse, car 2F représente une valeur hexadécimale, dont l’équivalent décimal serait 47 , et si vous regardez le tableau ASCII , vous verrez que le caractère 47 est la barre oblique (/).

%c0%af serait en caractère décimal 192 suivi du caractère 175, qui sont tous deux des caractères étendus ASCII et dont l'apparence peut varier en fonction de la police choisie. L'équivalent HTML serait À¯ et pourrait être affiché comme À¯, ce qui n'est certainement pas la même chose qu'une barre oblique comme vous le pensiez.

3
richhallstoke