Jump to content

Процентное кодирование

(Перенаправлено из Application/x-www-form-urlencoded )

Кодирование URL-адресов , официально известное как процентное кодирование , представляет собой метод кодирования произвольных данных в единый идентификатор ресурса (URI) с использованием только символов US-ASCII , допустимых в URI. Хотя оно известно как кодирование URL-адреса , оно также используется в более общем смысле в основном наборе унифицированных идентификаторов ресурсов (URI), который включает в себя как унифицированный указатель ресурса (URL), так и унифицированное имя ресурса (URN). Следовательно, он также используется при подготовке данных application/x-www-form-urlencoded тип носителя , который часто используется при отправке данных HTML- формы в HTTP- запросах.

Процентное кодирование в URI

[ редактировать ]

Типы символов URI

[ редактировать ]

Символы, разрешенные в URI, могут быть зарезервированы или незарезервированы (или символ процента как часть процентного кодирования). Зарезервированные символы — это символы, которые иногда имеют особое значение. Например, косая черта используется для разделения различных частей URL-адреса (или, в более общем смысле, URI). Незарезервированные символы не имеют такого значения. При использовании процентного кодирования зарезервированные символы представляются с помощью специальных последовательностей символов. Наборы зарезервированных и незарезервированных символов, а также обстоятельства, при которых определенные зарезервированные символы имеют особое значение, немного изменились с каждой редакцией спецификаций, регулирующих URI и схемы URI.

RFC 3986, раздел 2.2 Зарезервированные символы (январь 2005 г.)
!#$&'()*+,/:;=?@[]
RFC 3986, раздел 2.3 Незарезервированные символы (январь 2005 г.)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789-._~

Другие символы в URI должны быть закодированы в процентах.

Зарезервированные персонажи

[ редактировать ]

Когда символ из зарезервированного набора («зарезервированный символ») имеет особое значение («зарезервированное назначение») в определенном контексте, и схема URI говорит, что необходимо использовать этот символ для какой-то другой цели, тогда символ должен быть закодирован в процентах . Процентное кодирование зарезервированного символа включает преобразование символа в соответствующее ему байтовое значение в ASCII и последующее представление этого значения в виде пары шестнадцатеричных цифр (если имеется одна шестнадцатеричная цифра, ведущий ноль добавляется ). Цифры, которым предшествует знак процента ( %) в качестве escape-символа затем используются в URI вместо зарезервированного символа.(Символ, отличный от ASCII, обычно преобразуется в последовательность байтов в UTF-8 , а затем каждое значение байта представляется, как указано выше.)

Зарезервированный персонаж /Например, если он используется в компоненте «путь» URI , он имеет особое значение, поскольку является разделителем между сегментами пути. Если в соответствии с заданной схемой URI / должен находиться в сегменте пути, тогда три символа %2F или %2f необходимо использовать в сегменте вместо необработанного /.

Зарезервированные символы после процентного кодирования
!#$&'()*+,/:;=?@[]
%21%23%24%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D

Зарезервированные символы, которые не имеют зарезервированного назначения в определенном контексте, также могут быть закодированы в процентах, но семантически не отличаются от тех, которые этого не делают.

В компоненте запроса URI (часть после ? персонаж), например, / по-прежнему считается зарезервированным символом, но обычно не имеет зарезервированного назначения, если в конкретной схеме URI не указано иное. Символ не обязательно должен быть закодирован в процентах, если у него нет зарезервированной цели.

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

Незарезервированные символы

[ редактировать ]

Символы из незарезервированного набора никогда не нуждаются в процентном кодировании.

URI, которые отличаются только тем, закодирован ли незарезервированный символ в процентах или отображается буквально, эквивалентны по определению, но процессоры URI на практике не всегда могут распознать эту эквивалентность. Например, потребители URI не должны относиться %41 в отличие от A или %7E в отличие от ~, но некоторые делают. Для обеспечения максимальной совместимости производителям URI не рекомендуется использовать процентное кодирование незарезервированных символов.

Процентный символ

[ редактировать ]

Поскольку символ процента ( % ) служит для обозначения октетов с процентным кодированием, он сам должен быть закодирован в процентах как %25 для использования в качестве данных в URI.

Произвольные данные

[ редактировать ]

Большинство схем URI включают представление произвольных данных, таких как IP-адрес или путь к файловой системе , в качестве компонентов URI. Спецификации схемы URI должны (но часто этого не делают) обеспечивать явное сопоставление между символами URI и всеми возможными значениями данных, представленными этими символами.

Двоичные данные
[ редактировать ]

С момента публикации RFC 1738 в 1994 году было указано, что схемы, обеспечивающие представление двоичных данных в URI, должны делить данные на 8-битные байты и процентно кодировать каждый байт таким же образом, как указано выше. [1] Например, значение байта 0x0F должно быть представлено как %0F, но значение байта 0x41 может быть представлено как A, или %41. Обычно предпочтительнее использовать незакодированные символы для буквенно-цифровых и других незарезервированных символов, поскольку это приводит к сокращению URL-адресов.

Данные персонажа
[ редактировать ]

Процедура процентного кодирования двоичных данных часто экстраполировалась, иногда ненадлежащим образом или не будучи полностью указанной, для применения к символьным данным. В годы становления Всемирной паутины при работе с символами данных в репертуаре ASCII и использовании соответствующих им байтов в ASCII в качестве основы для определения последовательностей с процентным кодированием эта практика была относительно безвредной; просто предполагалось, что символы и байты сопоставляются один к одному и взаимозаменяемы. Однако потребность в представлении символов за пределами диапазона ASCII быстро росла, и схемы и протоколы URI часто не обеспечивали стандартные правила подготовки символьных данных для включения в URI. В результате веб-приложения начали использовать различные многобайтовые кодировки, кодировки с отслеживанием состояния и другие несовместимые с ASCII кодировки в качестве основы для процентного кодирования, что привело к двусмысленности и трудностям с надежной интерпретацией URI.

Например, многие схемы и протоколы URI, основанные на RFC 1738 и 2396, предполагают, что символы данных будут преобразованы в байты в соответствии с некоторой неопределенной кодировкой символов , прежде чем они будут представлены в URI незарезервированными символами или байтами с процентным кодированием. Если схема не позволяет URI предоставлять подсказку о том, какая кодировка использовалась, или если кодировка конфликтует с использованием ASCII для процентного кодирования зарезервированных и незарезервированных символов, то URI не может быть надежно интерпретирован. Некоторые схемы вообще не учитывают кодировку и вместо этого просто предполагают, что символы данных сопоставляются непосредственно с символами URI, что оставляет на усмотрение реализаций решать, следует ли кодировать процентное кодирование символов данных, которые не входят ни в зарезервированные, ни в незарезервированные наборы, и если да, то как.

Общие символы после процентной кодировки (на основе ASCII или UTF-8)
"%-.<>\^_`{|}~£
%20%22%25%2D%2E%3C%3E%5C%5E%5F%60%7B%7C%7D%7E%C2%A3%E2%82%AC

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

Текущий стандарт

[ редактировать ]

Общий синтаксис URI рекомендует, чтобы новые схемы URI, обеспечивающие представление символьных данных в URI, фактически представляли символы из незарезервированного набора без перевода и преобразовывали все остальные символы в байты в соответствии с UTF-8 , а затем в проценты. -закодировать эти значения. Это предложение было введено в январе 2005 года с публикацией RFC 3986. Схемы URI, введенные до этой даты, не затрагиваются.

В текущей спецификации не рассматривается вопрос о том, что делать с закодированными символьными данными. Например, в компьютерах символьные данные на некотором уровне проявляются в закодированной форме и, таким образом, могут рассматриваться как двоичные или символьные данные при сопоставлении с символами URI. Предположительно, спецификация схемы URI должна учитывать эту возможность и требовать того или иного, но на практике лишь немногие из них, если таковые имеются, на самом деле это делают.

Нестандартные реализации

[ редактировать ]

Существует нестандартная кодировка символов Юникода: %uxxxx, где xxxx — это кодовая единица UTF-16, представленная четырьмя шестнадцатеричными цифрами. Такое поведение не указано ни в одном RFC и отклонено W3C . 13-е издание ECMA-262 по-прежнему включает escape функция, использующая этот синтаксис, которая применяет UTF-8 , а затем экранирует полученные байты в процентах. к строке кодировку [2]

Тип application/x-www-form-urlencoded

[ редактировать ]

При отправке данных, введенных в HTML- формы , имена и значения полей формы кодируются и отправляются на сервер в сообщении HTTP-запроса с использованием метода GET или POST или, исторически, по электронной почте . [3] Кодировка, используемая по умолчанию, основана на ранней версии общих правил процентного кодирования URI. [4] с рядом модификаций, таких как нормализация новой строки и замена пробелов на + вместо %20. Медиа -тип данных, закодированных таким образом: application/x-www-form-urlencodedи в настоящее время он определен в спецификациях HTML и XForms . Кроме того, спецификация CGI содержит правила того, как веб-серверы декодируют данные этого типа и делают их доступными приложениям.

Когда данные формы HTML отправляются в запросе HTTP GET, они включаются в компонент запроса URI запроса, используя тот же синтаксис, который описан выше. При отправке в запросе HTTP POST или по электронной почте данные помещаются в тело сообщения и application/x-www-form-urlencoded включается в заголовок Content-Type сообщения.

См. также

[ редактировать ]
  1. ^ RFC 1738 §2.2; RFC 2396 §2.4; RFC 3986 §1.2.1, 2.1, 2.5.
  2. ^ «Спецификация языка ECMAScript 2017 (ECMA-262, 8-е издание, июнь 2017 г.)» . Экма Интернешнл. Архивировано из оригинала 2 июля 2018 г. Проверено 20 июня 2018 г.
  3. ^ Поддержка пользовательского агента для отправки HTML- mailto форм по электронной почте с использованием URL-адреса в качестве действия формы была предложена в разделе 5.6 RFC 1867 в эпоху HTML 3.2. Различные веб-браузеры реализовали это, вызывая отдельную программу электронной почты или используя свои собственные элементарные возможности SMTP . Хотя иногда он был ненадежным, на короткое время он был популярен как простой способ передачи данных формы без использования веб-сервера или сценариев CGI .
  4. ^ Бернерс-Ли, Т. (июнь 1994 г.). «РФК 1630» . Инструменты IETF . IETF. Архивировано из оригинала 21 июня 2016 года . Проверено 29 июня 2016 г.
[ редактировать ]

В следующих спецификациях обсуждаются и определяются зарезервированные символы, незарезервированные символы и процентное кодирование в той или иной форме:

Различные реализации:

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6a3732b2899c8c5ab73479ff9a65cf88__1721834460
URL1:https://arc.ask3.ru/arc/aa/6a/88/6a3732b2899c8c5ab73479ff9a65cf88.html
Заголовок, (Title) документа по адресу, URL1:
Percent-encoding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)