В чем смысл конкретных зарезервированных символов в URL? - PullRequest
4 голосов
/ 03 января 2011

Я заметил, что все эти символы нелегальны

#%<>?\/*+|:"

Я заметил, что они закодированы (% NN, где NN - шестнадцатеричное значение), но их можно заменить без проблем

$,;=& @

(обратите внимание на пробел, который обычно кодируется как + (но может быть% 20))

#%?/+ Я понимаю. Но что делают следующие персонажи? <>\*|":

Примечание: я понимаю, что : делает в доменной части (это порт), поскольку @ является логином, но после первого / почему: незаконно? (@ isnt)

Ответы [ 2 ]

3 голосов
/ 03 января 2011

RFC 2396 (универсальный код ресурса URI: общий синтаксис) говорит:

Многие URI включают компоненты, состоящие из или разделенные определенным специальные символы. Эти символы называются «зарезервированными», так как их использование в компоненте URI ограничено их зарезервированным цель.

reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
              "$" | ","

2.4.3. Исключенные символы US-ASCII

Символы угловых скобок "<" и ">" и двойные кавычки (") исключены, потому что они часто используются в качестве разделителей вокруг URI в текстовые документы и поля протокола. Символ "#" исключен потому что он используется для отделения URI от идентификатора фрагмента в URI ссылки (раздел 4). Символ процента "%" исключен, потому что используется для кодирования экранированных символов.

delims      = "<" | ">" | "#" | "%" | <">

Другие символы исключены, потому что шлюзы и другой транспорт агенты, как известно, иногда изменяют такие символы, или они используется в качестве разделителей.

unwise      = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"

Я думаю, что это охватывает все, что вы упомянули. Звезда "*" не зарезервирована и может быть использована. Вставьте это в браузер: http://en.wikipedia.org/wiki/*

0 голосов
/ 03 января 2011

Я не уверен в этом, но могут ли они быть зарезервированы, чтобы, если вы попытаетесь ввести URL-адреса в среду оболочки, URL-адрес не будет разделен на разные части без необходимости?Например, представьте, что я пытаюсь выполнить

curl http://www.stackoverflow.com/this>that > myFile.txt

. Это может привести к отключению командной строки, если она попытается получить неправильный URL-адрес http://www.stackoverflow.com/this, затем записать его в файл с именем that и отключитьпереводчик, когда он ударяет второй >.Это объяснение учитывает все перечисленные вами символы (все они что-то значат в среде оболочки), но это лишь мое первое предположение относительно того, почему это может быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...