Почему такие символы, как @, $,: и; зарезервированные символы в компоненте запроса URL?

Я читаю RFC2396 на URL, который говорит

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

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

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

query         = *uric

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

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

С практической точки зрения, я должен всегда URL кодировать эти символы, когда они в запросе? Браузеры и серверы, которые я видел, обрабатывают: и; и другие символы без кодирования

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам