Command Palette

Search for a command to run...

Анализатор строк запроса: поверните параметры URL-адресов в JSON и обратно

Анализатор строк запроса: поверните параметры URL-адресов в JSON и обратно

T
Toolz Team
|Aug 23, 2026|16 Мин. читать

Часть коллекции URL и ссылки

Однажды я потерял час из-за строки запроса. Отправлял сторонний веб-хук filter[status]=open&filter[assignee]=meмой куратор читал filter как плоская строка, и я не мог понять, почему каждый запрос пришел через нефильтрованный. в тот момент, когда я вставил необработанный URL в анализатор строки запроса и увидел, что он разрешается к вложенному объекту, ошибка была очевидна: отправитель использовал скобки обозначения, а мой анализатор - нет. Это руководство охватывает то, как я использую Запрос Строка Парсер на Toolz.dev, что на самом деле представляют собой сложные части строк запроса и почему один и тот же ключ закодирован двумя разными способами, может незаметно сломать интеграцию.

TL;DR: Строка запроса - это часть URL-адреса после вопросительного знака, которая несет параметры в виде пар ключ-значение. анализатор строки запроса преобразует это в структурированный JSON, декодируя процентное кодирование и обрабатывая повторяющиеся ключи и массивы скобок, и может построить правильно закодированную строку запроса обратно из JSON. The Запрос Строка Парсер выполняет оба направления в браузере, поэтому вы можете проверить грязный URL-адрес или собрать чистый, не покидая страницу.

Что такое строка запроса?

Строка запроса - это раздел URL-адреса, который начинается после первого вопросительного знака и заканчивается на фрагменте, часть после хеша. Он несет параметры как key=value пары, соединенные амперсандами, так что ?q=json&page=2 проходит два параметра Серверы и код клиента читают те, чтобы фильтровать поиск, отслеживать кампанию, вводить список в страницы или переносить состояние между страницами. общие правила для того, что является и не является законным в этом компоненте, исходят от RFC 3986, стандарт URI и конкретные правила, которым следуют браузеры для параметров стиля формы, взяты из whatwg стандарт URL, йо-

Загвоздка в том, что RFC 3986 определяет синтаксис компонента запроса, но не его значение. В нем говорится, какие символы разрешены и как они должны быть закодированы в процентах, но ничего не говорится о том, как это сделать key=value пары сопоставляются со структурой данных. эта интерпретация была унаследована от подачи формы HTML, и разные платформы расширили ее несовместимыми способами. Вот почему одна и та же строка запроса может означать немного разные вещи для серверной части PHP, контроллера Rails и интерфейса JavaScript, и почему синтаксический анализатор должен сделать свои соглашения явными.

Каждый ключ и значение в строке запроса кодируются URL-адресом, чтобы сохранились зарезервированные символы. Пространство становится %20 или знак плюса, становится амперсанд внутри значения %26 так что его не принимают за разделитель, и косая черта становится %2F. Анализ означает разделение пар, а затем декодирование каждой стороны, а построение означает кодирование каждой стороны и объединение пар. Попасть в кодировку неправильно в любом направлении, и значения будут молча повреждены.

Что на самом деле делает анализатор строк запросов?

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

На Toolz.dev инструмент работает в двух направлениях В режиме анализа вы вставляете полный URL или только его строку запроса и получаете JSON и таблицу параметров В режиме сборки вы вставляете объект JSON и получаете правильно закодированную строку запроса, с выбором того, как представлены массивы Загрузите образец и вы сможете посмотреть реальный URL с фрагментом, массивом повторяющегося стиля и закодированным пространством разрешить в чистый JSON, затем перестроить его.

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

Как обрабатываются повторяющиеся ключи?

Один и тот же ключ может юридически появляться более одного раза в строке запроса, например tags=react&tags=laravel, и нет единого правильного способа интерпретировать это, что является корнем большой путаницы. Различные системы разрешают дубликаты по-разному, поэтому синтаксический анализатор должен позволить вам выбирать.

Наиболее распространенным соглашением и стандартом инструмента Toolz.dev является сбор повторяющихся ключей в массив, т.е tags=react&tags=laravel становиться {"tags":["react","laravel"]}. Это соответствует тому, как браузер и #39;s собственные URLSearchParams.getAll раскрывает значения и то, как ведут себя большинство современных бэк-эндов Но некоторые фреймворки сохраняют только первое вхождение, а некоторые сохраняют только последнее, поэтому инструмент предлагает также варианты "держать первым" и "держать последним". Когда вы отлаживаете интеграцию, соответствие поведению парсера & # 39;s системе, которая произвела или потребляет URL-адрес, делает JSON значимым.

Эта двусмысленность не является академической Классическая проблема безопасности и корректности, называемая загрязнением параметров HTTP, существует именно потому, что две системы в пути запроса могут решить id=1&id=2 иначе, один видит 1 и другое видящее 2. Возможность явно видеть, как данный анализатор разрешает дубликаты, - это самый быстрый способ рассуждать об этом классе ошибок.

Что означают скобки типа тегов [] или фильтра [цвета]?

Обозначение скобок - это соглашение для кодирования массивов и вложенных объектов внутри плоской строки запроса, и именно здесь анализаторы расходятся больше всего. Задняя пустая скобка отмечает массив, так что tags[]=react&tags[]=laravel строит {"tags":["react","laravel"]}. Именованная скобка отмечает вложенный объект, так что filter[color]=red&filter[size]=l строит {"filter":{"color":"red","size":"l"}}. Скобки могут вложены, так что a[b][c]=1 строит {"a":{"b":{"c":"1"}}}, йо-

Этот синтаксис обусловлен тем, как PHP и Ruby on Rails сериализуют данные форм, а также многими библиотеками JavaScript, такими как qs следуйте ему. он не является частью какого-либо основного стандарта URL, именно поэтому простая URLSearchParams в браузере он не будет расширяться, что даст вам буквальный ключ tags[] вместо массива. анализатор Toolz.dev понимает соглашение и расширяет его до структуры сопоставления, и это позволяет выключить это поведение, когда вместо этого вам нужны буквальные ключи.

Вот как выстраиваются основные соглашения, как при анализе, так и при построении:

Стиль массива Кодируется как Парсы к Общее в
Повторный ключ tags=a&tags=b ["a","b"] Браузеры, большинство бэк-эндов
Пустая скобка tags[]=a&tags[]=b ["a","b"] PHP, Rails, библиотека qs
Индексированная скобка tags[0]=a&tags[1]=b ["a","b"] библиотека qs, упорядоченные данные
Соединяемый запятой tags=a,b одна строка для разделения Некоторые API, компактные URL

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

Почему знаки плюс превращаются в пространства?

В строке запроса URL-адреса буквальное пространство очень часто кодируется как знак плюс, а не как знак плюс %20. Это правило, унаследованное от application/x-www-form-urlencoded формат, который используют формы HTML, и whatwg стандарт URL кодирует его: при анализе данных, закодированных в форме, a + декодируется в пространство. Итак q=json+parser следует проанализировать json parser, и инструмент Toolz.dev делает это по умолчанию.

Тонкость в том, что это правило относится к компоненту запроса, а не к пути. А + в сегменте пути - это буквальный плюс. И иногда ваши данные действительно содержат плюс знаки, которые следует сохранить, например номер телефона или поиск C++. В этих случаях инструмент имеет переключатель для отключения плюс как пространство, поэтому плюс выживает в пути туда и обратно. Это такая деталь, как у общего назначения кодировщик URL не решит за вас, потому что не знает, смотрит ли он на запрос или путь.

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

Чем это отличается от полного анализатора URL-адресов?

Анализатор строк запросов и полный анализатор URL-адресов перекрываются, но отвечают на разные вопросы, а использование правого сохраняет шаг. Анализатор URL-адресов разбивает полную ссылку на свои компоненты, схему, хост, порт, путь, запрос и фрагмент, и это то, что вы хотите, когда отлаживаете, куда идет запрос или почему перенаправление или проверка CORS ведет себя странно. Анализатор строк запросов фокусируется только на запросе и превращает его в структурированный, редактируемый JSON, включая массивы и вложенные ключи, и может построить запрос обратно.

выше URL-адрес на Toolz.dev инструмент для анатомии: дать ему ссылку и он показывает вам различие хост против происхождения, порт по умолчанию, и части пути. парсер строки запроса является инструментом для работы с параметрами: дать ему ту же ссылку и он дает вам параметры, как JSON вы можете редактировать, а затем перестраивает строку запроса из ваших правок. на практике я использую их вместе, анализатор URL-адресов, чтобы понять ссылку и анализатор строки запроса, чтобы изменить ее параметры, и если я собираю ссылку кампании я достигаю для УТМ-строитель вместо этого это конструктор строк запросов, специализирующийся на тегах аналитики.

Когда я действительно дотянусь до этого?

Честный ответ - всякий раз, когда URL-адрес делает больше, чем указывает на страницу. Я использую его для отладки веб-зацепок и перенаправлений OAuth, где параметры несут всю полезную нагрузку, а одно неправильно закодированное значение нарушает поток. Я использую его, чтобы прочитать параметры отслеживания по маркетинговой ссылке, чтобы точно увидеть, какую кампанию проходит. Я использую его, чтобы преобразовать строку запроса коллеги, вставленную в чат, в JSON. Я могу опуститься в тестовое приспособление, а чтобы сделать обратное, превращая небольшой объект в строку запроса для быстрого ручного запроса.

Работающий пример делает выигрыш конкретным. поставщик OAuth перенаправляет обратно в ваше приложение с чем-то вроде ?code=abc123&state=xyz789&scope=read%20write&error=. Вставлено в синтаксический анализатор, который преобразуется в чистый объект: code а state как их буквальные ценности, scope декодировано в read write потому что %20 это пространство, и error в качестве пустой строки, а не отсутствующего ключа, который сообщает вам, что провайдер отправил параметр, но оставил его пустым. читая, что из необработанного URL-адреса на глаз вы, скорее всего, пропустите закодированное пространство scope и неправильно истолковать пустое error, и оба они являются именно те детали, которые решают, правильно ли ваш обработчик обратного вызова ветвится Видеть декодированную таблицу удаляет двусмысленность, и если вам затем нужно воспроизвести запрос, режим сборки превращает ваш отредактированный объект обратно в действительный URL обратного вызова за один шаг.

Потому что большая часть этой работы включает в себя URL-адреса, которые несут токены, подписанные значения и идентификаторы отслеживания, делая это с помощью инструмента, который полностью работает в вашем браузере. Ничто из того, что вы вставляете, не передается, не регистрируется и не сохраняется, и инструмент продолжает работать с сетью выключен, поэтому вы можете безопасно проверять подписанный URL-адрес обратного вызова из производства, а не очищенную копию. Я делаю более широкий аргумент в пользу сохранения такого рода работы на стороне клиента Конфиденциальность данных в онлайн-инстру руководство, и этот анализатор находится рядом с другими ссылочными и текстовыми утилитами, которые я описал в Набор инструментов для веб-разработчиков. Если частью вашей работы является превращение беспорядочного ввода в чистый slugs и идентификаторы, Slug Генератор является естественным спутником выходной стороны работы URL.

Часто задаваемые вопросы

Что такое строка запроса?

Строка запроса - это часть URL-адреса после вопросительного знака, которая несет параметры в виде пар ключ-значение, соединенных амперсандами, таких как ?q=json&page=2. Серверы и клиентский код считывают его для фильтрации результатов, отслеживания кампаний или состояния прохождения. Каждый ключ и значение кодируются URL-адресом, чтобы пробелы и зарезервированные символы сохранились, а фрагмент после хеша не был его частью.

Как обрабатываются повторяющиеся клавиши при анализе?

По умолчанию ключ, который появляется более одного раза, объединяется в массив, поэтому tags=react&tags=laravel анализируется на {"tags":["react","laravel"]}. Вы можете вместо этого переключиться, чтобы сохранить только первое значение или только последнее значение, потому что разные задние части разрешают дубликаты по-разному, и вы хотите, чтобы JSON соответствовал системе, на которую вы ориентируетесь.

Что означают скобки типа тегов [] или фильтра [цвета]?

Обозначение скобок кодирует массивы и вложенные объекты внутри плоской строки запроса. tags[]=react&tags[]=laravel строит массив, и filter [color]=red&filter[size]=l строит вложенный объект {& quot;filter":{& quot;color":& quot;red",& quot;size":& quot;l& quot;}}.Это распространено в библиотеках PHP, Rails и form, поэтому парсер расширяет его до совпадающей структуры, и вы можете выключить это, чтобы сохранить буквальные ключи.

Почему знак плюс становится пробелом?

В строке запроса URL-адреса буквальное пространство часто кодируется как знак плюс, правило, унаследованное от отправки формы HTML, поэтому синтаксический анализатор по умолчанию преобразует + обратно в пробел. Если ваши данные содержат действительные знаки плюс, которые необходимо сохранить, например C++ или номер телефона, выключите опцию плюс как пробел, и плюс сохранится.

Могу ли я построить строку запроса от JSON?

Да. Переключитесь в режим построения и вставьте объект JSON из пар ключ-значение. Инструмент procent-кодирует каждый ключ и значение и соединяет их с амперсандами, и вы можете выбрать, как кодируются массивы: повторяющиеся ключи, пустые скобки, индексированные скобки или список, разделенный запятыми, поэтому выходные данные соответствуют всем ожиданиям принимающей системы.

В чем разница между этим и полным анализатором URL-адресов?

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

Обрабатывает ли он полный URL-адрес или только часть запроса?

Оба. если вы вставляете полный URL-адрес, синтаксический анализатор опускает все до вопросительного знака включительно и игнорирует фрагмент после хеша, поэтому вы получаете только параметры. Если вы вставляете пустую строку запроса без вопросительного знака, она анализируется как есть, что удобно, когда вы копировали только параметры.

Мой URL-адрес отправляется куда-нибудь?

Нет. Анализ, декодирование и кодирование выполняются как JavaScript в вашем браузере, поэтому ничего не передается, не регистрируется и не сохраняется. Вы можете подтвердить это, просмотрев вкладку сети во время анализа URL-адреса или отключившись от Интернета, поскольку инструмент продолжает работать в автономном режиме после загрузки страницы.


Проверьте или соберите параметры с помощью бесплатного Запрос Строка Парсер. Он анализирует URL-адрес в JSON и создает обратную строку запроса, обрабатывая повторяющиеся ключи, массивы скобок и кодирование полностью в вашем браузере.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!