URL Парсер / Инспектор
Вставьте один или несколько полных URL-адресов (по одному на строку), чтобы разбить каждый из них на свой протокол, хост, путь, строку запроса и фрагмент с декодированием каждого параметра запроса.
Вставьте один или несколько полных URL-адресов (по одному на строку), чтобы разбить каждый из них на свой протокол, хост, путь, строку запроса и фрагмент с декодированием каждого параметра запроса.
URL может безопасно содержать только буквы, цифры и небольшой набор символов. Все остальное, включая пробелы, пунктуации и неанглийские символы, должно быть представлено с процентным кодированием, прежде чем оно сможет перемещаться по URL-адресу.
Кодирование процента заменяет символ знаком процента, за которым следует его двухзначное шестнадцатеричное значение байта, используя UTF-8 для чего-либо за пределами базового ASCII. Пространство становится %20, амперсанд — %26, а акцентированный или нелатинский символ может стать несколькими последовательностями %XX подряд, поскольку UTF-8 представляет его более чем одним байтом.
Такие символы, как ? & = # и / имеют особое значение в структуре URL: они помечают строку запроса, отдельные параметры или вводят фрагмент. Если ваши данные должны содержать один из этих символов в качестве значения, а не в качестве структуры, сначала закодируйте его, или браузер или сервер могут неправильно понять, где заканчивается одна часть URL-адреса и начинается следующая.
Декодирование переворачивает процесс: он считывает каждую последовательность %XX обратно в символ (или байт), который он представляет.
| характер | закодированный | Где используется |
|---|---|---|
| пространство | %20 | Разделитель слов внутри значения |
| ! | %21 | |
| " | %22 | |
| # | %23 | Начинается фрагмент |
| % | %25 | Начинается последовательность, закодированная в процентах |
| & | %26 | Отдельные параметры запросов |
| ' | %27 | |
| ( | %28 | |
| ) | %29 | |
| + | %2B | Часто читается как пространство внутри строки запроса. |
| , | %2C | |
| / | %2F | Отдельные сегменты пути |
| : | %3A | Следует схеме, например https: |
| ; | %3B | |
| = | %3D | Назначает значение параметра запроса |
| ? | %3F | Запускает строку запроса |
| @ | %40 | |
| [ | %5B | |
| ] | %5D |
Ученик копирует веб-адрес из онлайн-формы и видит текст вроде science%20project%20notes. Начинающий разработчик изучает запрос к API и обнаруживает, что амперсанд внутри значения поиска отображается как %26. Ссылка работает, но её трудно читать и отлаживать.
Инструмент декодирования URL преобразует последовательности в процентной кодировке обратно в соответствующие символы. Например, %20 обычно становится пробелом, а %26 — амперсандом.
Декодирование полезно для понимания ссылок, изучения параметров запроса, анализа веб-кодировки и диагностики некорректно сформированных запросов. Выполнять его нужно аккуратно, поскольку зарезервированные символы после декодирования могут изменить структуру URL.
Инструмент не определяет, безопасен ли, корректен ли или авторизован ли адрес назначения. Он лишь меняет представление закодированных символов. Ученикам и разработчикам по-прежнему нужно самостоятельно проверять хост, путь, параметры и декодированные значения.
В URL-адресах определённые символы используются для разделения частей. Знак вопроса может начинать строку запроса, амперсанд может разделять параметры, а знак решётки может обозначать фрагмент.
Когда один из этих символов должен присутствовать как данные, а не как структурный разделитель, его можно закодировать в процентном формате. За знаком процента следуют две шестнадцатеричные цифры, представляющие значение байта.
| Закодированное значение | Декодированный символ | Типичное значение |
|---|---|---|
%20 |
Пробел | Разделяет слова внутри значения |
%21 |
! |
Восклицательный знак |
%23 |
# |
Знак решётки или маркер фрагмента |
%26 |
& |
Амперсанд или разделитель запроса |
%2B |
+ |
Знак плюса |
%2F |
/ |
Косая черта или разделитель пути |
%3A |
: |
Двоеточие |
%3D |
= |
Знак равенства или разделитель параметра |
%3F |
? |
Знак вопроса или маркер запроса |
Шестнадцатеричные буквы в процентных последовательностях не чувствительны к регистру, поэтому %2F и %2f обозначают один и тот же байт.
Рассмотрим такой пример:
https://example.edu/search?q=water%20cycle&level=grade%206#results
Его основные части:
httpsexample.edu/searchq=water%20cycle&level=grade%206resultsЗначения запроса декодируются в «water cycle» и «grade 6». Структурный амперсанд между параметрами не следует путать с амперсандом, закодированным внутри значения.
Разработчики часто создают проблемы, декодируя весь URL целиком, хотя декодировать нужно только один компонент. Зарезервированные символы могут играть разные роли в зависимости от того, где они находятся.
Допустим, запрос содержит:
?topic=research%26writing
Закодированное значение представляет собой:
research&writing
Амперсанд здесь — часть значения темы. Если декодировать весь запрос целиком, а затем разобрать его неправильно, амперсанд можно ошибочно принять за разделитель, вводящий ещё один параметр.
Надёжное приложение анализирует URL в соответствии с его структурой и декодирует каждый компонент с помощью подходящего URL-API, а не выполняет произвольную замену строк.
Ученики рассматривают:
https://example.edu/library?topic=space%20science
Они определяют хост, путь, имя параметра и закодированное значение.
Значение space%20science превращается в space science. Ученики объясняют, почему обычный пробел, как правило, не пишется напрямую в общей ссылке.
Учитель предлагает:
?title=Design%20%26%20Technology
Декодированное название — Design & Technology. Ученики замечают, что закодированный амперсанд относится к названию, а не разделяет параметры.
Ученики используют инструмент кодирования URL, чтобы подготовить новое значение, затем декодируют его и сравнивают результат.
Одна из последовательностей содержит неполный процентный escape-код, например %2. Ученики выясняют, почему после знака процента ожидаются две шестнадцатеричные цифры.
Ученик копирует ссылку поиска библиотеки с несколькими закодированными словами. Видимый URL трудно интерпретировать.
Ученик декодирует значения запроса и определяет, какие поисковые термины и фильтры были включены. Хост проверяется перед открытием ссылки.
Это помогает ученику понять, как сайт передаёт поисковую информацию между страницами.
Начинающий разработчик отправляет запрос с названием курса, содержащим амперсанд. Сервер получает название как два отдельных параметра.
Разработчик изучает необработанный запрос и обнаруживает, что амперсанд не был закодирован как данные. Значение подготавливается с помощью стандартного URL-API и снова тестируется.
Декодер помогает объяснить запрос, но постоянное решение использует структурированную обработку URL, а не ручную замену.
Учитель получает ссылку на классный документ, но при переходе появляется сообщение, что файл не найден.
URL проверяется и декодируется. Имя файла содержит косую черту, которая могла быть воспринята как разделитель пути, либо пробел был скопирован некорректно.
Учитель запрашивает у владельца документа новую ссылку для общего доступа, а не редактирует вслепую незнакомый приватный адрес.
Ученики создают простую форму поиска и наблюдают за URL после отправки текста с пробелами и знаками препинания.
Они декодируют значения параметров и сравнивают их с исходными данными формы. Класс обсуждает, почему браузеры кодируют значения перед тем, как поместить их в URL.
В упражнении не используются настоящие пароли, данные учеников или личные ответы.
Ссылка в школьной рассылке содержит несколько параметров отслеживания. Учитель хочет понять, какая информация в неё включена, прежде чем поделиться ею.
URL разбивается на параметры, и их значения декодируются. Ненужные значения отслеживания можно удалить, только если это не нарушает работу требуемого адреса назначения.
Итоговая ссылка тестируется, а не считается рабочей просто после ручного редактирования.
На уроке информатики тестируют короткую неанглийскую фразу в URL. Закодированный результат содержит несколько процентных последовательностей, поскольку символы UTF-8 могут занимать несколько байт.
Ученики декодируют полную последовательность и сравнивают её с исходной фразой. Удаление одного закодированного байта может привести к появлению символа-заменителя или недействительного текста.
Это упражнение показывает, что один видимый символ не всегда соответствует одному закодированному байту.
Разработчик ожидает пробел, но видит %2520. Последовательность %25 означает знак процента, поэтому первый проход декодирования даёт %20, а второй может дать пробел.
Разработчик отслеживает, где значение было закодировано дважды. Поток данных исправляется, вместо того чтобы повторно декодировать каждый ввод.
Ссылка содержит ещё один закодированный URL внутри параметра, например redirect или next.
Пользователь декодирует значение как обычный текст и проверяет реальный хост назначения, прежде чем открыть его. Закодированному адресу не стоит доверять лишь потому, что его конечный пункт назначения трудно прочитать.
| Ввод | Вероятная кодировка | Подходящий инструмент | Пример декодирования |
|---|---|---|---|
lesson%20notes |
Процентная кодировка URL | Декодер URL | lesson notes |
<p> |
HTML-сущности | Декодер HTML | <p> |
SGVsbG8= |
Base64 | Декодер Base64 | Hello |
u003F |
Escape-последовательность Unicode | Парсер JSON или другой языковой парсер | ? |
Используйте инструмент декодирования HTML для ссылок на сущности и инструмент декодирования Base64 только тогда, когда точно известно, что данные представлены именно в этих форматах.
Пробелы обычно представляются как %20. В кодировке запросов в стиле форм знак плюса также может интерпретироваться как пробел.
Отсюда возникает важное различие:
class%20notes обычно декодируется в class notes.class+notes может декодироваться в class notes в контексте запроса формы.%2B.Используйте метод декодирования, предназначенный для конкретного компонента и формата. Декодер пути и декодер запроса формы могут по-разному обрабатывать знаки плюса.
Процентная кодировка работает на уровне байтов. Символ за пределами базового ASCII может быть представлен несколькими закодированными байтами.
Например, буква с диакритическим знаком или арабский символ может отображаться в виде последовательности из нескольких процентных escape-кодов. Все необходимые байты должны сохранять порядок и интерпретироваться с использованием правильной кодировки символов.
Если в результате появляются символы-заменители, проверьте следующее:
Зарезервированные символы могут изменить структуру после декодирования. Разделите URL на компоненты и декодируйте только нужное значение.
Повторное декодирование может превратить ранее безопасные данные в активные разделители или неожиданные пути. Выясните, почему существует несколько уровней кодирования.
Замена %20 на пробелы не обрабатывает все закодированные символы, последовательности UTF-8, некорректно сформированный ввод или правила для знака плюса. Используйте в коде структурированный парсер URL или стандартный API.
Сначала декодируйте его как текст. Изучите схему, имя хоста, путь и параметры, прежде чем решать, стоит ли его посещать.
%26 и & в разных контекстах могут представлять амперсанд. Выбирайте декодер исходя из фактического представления.
После знака процента должны следовать две шестнадцатеричные цифры. Неполные или недействительные последовательности могут указывать на повреждённый ввод.
URL-адреса могут появляться в истории браузера, журналах, аналитике, скриншотах и общих сообщениях. Конфиденциальные учётные данные не следует помещать в строки запроса.
Декодированные значения могут содержать символы со специальным значением. Декодированная косая черта может повлиять на путь, амперсанд может изменить параметры, а угловые скобки могут превратиться в разметку при некорректной вставке на веб-страницу.
Приложения должны:
Декодирование — это не очистка данных. Оно раскрывает представленные символы, но не определяет, безопасны ли они для HTML, путей файлов, запросов к базе данных или перенаправлений.
URL может содержать поисковые термины, идентификаторы документов, адреса электронной почты, коды классов, имена файлов, данные отслеживания и другую информацию. Декодирование делает эту информацию более удобной для чтения, но не удаляет её.
Не вставляйте в сторонний инструмент приватные школьные ссылки, токены сброса пароля, подписанные URL-адреса, адреса записей учеников или данные аутентификации. Заменяйте конфиденциальные значения вымышленными примерами во время уроков и демонстраций отладки.
Перед тем как поделиться скриншотом декодированного URL, удалите имена учётных записей, приватные хосты, токены и идентификаторы документов.
Начинающим разработчикам стоит отдавать предпочтение структурированным URL-API. В JavaScript значение запроса можно проверить так:
const url = new URL(
"https://example.edu/search?q=water%20cycle"
);
const query = url.searchParams.get("q");
console.log(query);
// water cycle
Такой подход анализирует URL и возвращает декодированное значение параметра. Он, как правило, безопаснее и понятнее, чем вручную разбивать всю строку по каждому знаку вопроса, амперсанду и знаку равенства.
Используйте инструмент кодирования URL, чтобы подготовить текст для использования в качестве компонента URL, а затем декодируйте его, чтобы проверить пример для урока.
Если ввод содержит сущности вроде &lt; или &quot;, используйте инструмент декодирования HTML. Для заведомо Base64-текста используйте инструмент декодирования Base64.
Выбор правильного декодера предотвращает ненужные преобразования и делает отладку более надёжной.
Декодирование URL превращает последовательности в процентной кодировке в читаемые символы. Оно помогает ученикам понимать веб-адреса, а разработчикам — изучать значения запросов, запросы к API, многоязычный текст, перенаправления и проблемы двойного кодирования.
Самый безопасный способ — определить компонент URL, декодировать только необходимое и сохранить исходный ввод. Относитесь к результату как к данным, которые всё ещё требуют проверки.
Читаемую декодированную ссылку легче исследовать, но это не делает её автоматически безопасной или корректной. Перед использованием проверьте её структуру, адрес назначения, параметры, конфиденциальность и предполагаемую кодировку символов.