Чего мне здесь не хватает?
История, в основном.
U + 002B (+) - это под-раздел, в контексте URI и может свободно использоваться в части запроса; см. RF C 3986 Приложение A .
Но в Интернете , общий источник данных запроса - HTML отправка формы; когда мы отправляем форму, обработчик собирает пары значений ключа из формы и создает последовательность символов application / x- www-form-urlencoded, которая становится запросом URI.
Поскольку это очень распространенный случай, синтаксические анализаторы запросов в платформах веб-серверов часто по умолчанию обращают кодировку в обратном направлении, прежде чем предоставить вашему коду доступ к данным.
Это означает, что в ваших веб-журналах вы увидите:
/users?sort_by=-last_modified,+email
потому что это URI, который вы получили, но в вашем отображении параметров вы увидите
"sort_by" = "-last_modified, email"
, потому что «данные формы» декодируются до того, как вы их просматриваете.
Форма urlencoding имеет явный шаг, который заменяет любые пробелы (U + 0020) на U + 002B, а вместо этого U + 002B кодируется в процентах.
Чтобы проверить, является ли это вместо этого попробуйте выполнить следующий запрос:
GET /users?sort_by=-last_modified,%2Bemail
Я ожидаю, что вы обнаружите, что искомый плюс появляется в параметрах формы:
"sort_by" = "-last_modified,+email"