Детали процентного кодирования в стандарте URI - PullRequest
0 голосов
/ 01 декабря 2018

Я использую API, который требует, чтобы определенный параметр запроса (значение которого является сложным объектом) был закодирован в собственном JSON-подобном синтаксисе, который использует двоеточия в качестве разделителя.Вместо того чтобы заключать в кавычки строковые значения в объекте, эти строки должны быть% -кодированы по мере необходимости.Любые двоеточия внутри строковых значений должны быть закодированы.Любая часть структуры двоеточия не должна быть закодирована.Это показалось мне странным и заставило меня погрузиться в RFC3986, чтобы выяснить, как именно работает% -кодирование.

Рассмотрим следующий абзац в RFC:

6.2.2.2.Нормализация процентного кодирования

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

Исходя из этого, я подготовил две возможные интерпретации.

  1. Всякий раз, когда кодируется символ, который не нуждается в , он эквивалентен оригиналу.Это основано на предложении «[...] некоторые производители URI октетно-кодируют октеты, для которых не требуется процентное кодирование, в результате чего URI эквивалентны их некодированным аналогам».

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

Проблема заключается в том, что «незарезервированные символы» и «октеты, которые делаютНе нужно кодировать "две разные категории.Я предполагаю, что № 2 является правильной интерпретацией, но предыдущее предложение, кажется, противоречит этому.Может ли кто-нибудь с большим знанием подтвердить эту интерпретацию?

...