Почему такие символы, как @, $,: и;зарезервированные символы в компоненте запроса URL? - PullRequest
5 голосов
/ 08 марта 2012

Я читаю RFC2396 на URL-адресах, на которых написано

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

Но в разделе запроса в части URL (между? И #) указано

3.4.Компонент запроса Компонент запроса - это строка информации, которая должна интерпретироваться ресурсом.

query         = *uric

Внутри компонента запроса символы ";", "/", "?", ":", "@ "," & "," = "," + ",", "и" $ "зарезервированы.

Что такое" зарезервированная цель каждого из этих символов? Я понимаю, что&, = и + используются в запросе, но как насчет других символов?

На практике, должен ли я всегда url кодировать эти символы, когда они в запросе? Браузеры и серверы, которые я 'видел дескриптор: и; и другие символы без кодирования

1 Ответ

5 голосов
/ 23 января 2013

Я думаю, что раздел 2.2 из RFC 3986 , который устарел RFC 2396 , имеет возможное объяснение.Я цитирую:

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

Я думаю, что Berners-Lee, et al.здесь пытаются понять, что даже если не все зарезервированные символы используются в общем синтаксисе, описанном в RFC, авторы хотели оставить достаточно места для будущих схем или кода реализации, чтобы иметь возможность использовать эти символы так, как они считают нужным.

Что касается того, следует ли вам кодировать эти символы, я считаю, что вы должны исследовать и использовать Алгоритм процентного кодирования , который следует стандарту, а не использовать нестандартный или попробоватькатиться по-своему.Например, если вы используете такой язык, как C # или Python, то библиотеки, поставляемые с этими языками, включают реализацию алгоритма, соответствующую стандартам.Для получения более подробной информации, в разделе 2.4 RFC 3986 описано, когда кодировать или декодировать.

...