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 — в амперсанд.
Декодирование выручает, когда нужно разобрать ссылку, изучить параметры запроса, понять устройство веб-кодирования или найти причину неправильного запроса. Делать это надо внимательно: зарезервированные символы после декодирования способны изменить саму структуру адреса.
Инструмент не решает, безопасен ли адрес назначения, верен ли он и разрешён ли к нему доступ. Он только меняет представление закодированных символов. Хост, путь, параметры и раскодированные значения ученикам и разработчикам всё равно приходится проверять самим.
Адреса используют определённые символы, чтобы отделять свои части друг от друга. Вопросительный знак может начинать строку запроса, амперсанд — разделять параметры, а знак решётки — обозначать фрагмент.
Если такой символ должен появиться как данные, а не как структурный разделитель, его кодируют процентом. За знаком процента идут две шестнадцатеричные цифры, обозначающие значение байта.
| Закодированное значение | Раскодированный символ | Обычное назначение |
|---|---|---|
%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». Структурный амперсанд между параметрами не стоит путать с амперсандом, закодированным внутри значения.
Разработчики часто наживают себе проблемы, раскодировав адрес целиком там, где следовало взять одну-единственную часть. Зарезервированные символы играют разные роли в зависимости от того, где они стоят.
Допустим, в запросе есть такое:
?topic=research%26writing
Закодированное значение обозначает:
research&writing
Амперсанд здесь — часть значения темы. Если раскодировать весь запрос, а потом разобрать его неправильно, этот амперсанд легко принять за разделитель, который вводит ещё один параметр.
Надёжное приложение разбирает адрес по его структуре и декодирует каждую часть подходящим программным интерфейсом для работы с URL, а не произвольной заменой строк.
Класс разбирает вот это:
https://example.edu/library?topic=space%20science
Ученики находят хост, путь, имя параметра и закодированное значение.
Значение space%20science превращается в space science. Ученики объясняют, почему в ссылке, которой делятся с другими, обычно не пишут пробел напрямую.
Учитель даёт такой пример:
?title=Design%20%26%20Technology
Раскодированный заголовок выглядит так: Design & Technology. Ученики видят, что закодированный амперсанд принадлежит заголовку, а не разделяет параметры.
С помощью инструмента URL-кодирования ученики готовят новое значение, затем раскодируют его и сверяют результат.
В одной из последовательностей встречается незавершённый процентный код вроде %2. Ученики объясняют, почему после знака процента ожидаются именно две шестнадцатеричные цифры.
Ученик копирует ссылку на поиск в библиотеке, где закодировано сразу несколько слов. Видимый адрес разобрать почти невозможно.
Он раскодирует значения запроса и убеждается, какие слова и фильтры туда попали. Хост проверяется до того, как ссылку открывают.
Так ученик понимает, как сайт переносит сведения о поиске со страницы на страницу.
Начинающий разработчик отправляет запрос с названием курса, в котором есть амперсанд. Сервер получает это название как два отдельных параметра.
Заглянув в исходный запрос, разработчик видит, что амперсанд не был закодирован как данные. Значение готовят стандартным интерфейсом работы с адресами и пробуют снова.
Декодер помогает понять запрос, но по-настоящему чинит дело не ручная замена, а структурная работа с URL.
Учительнице присылают ссылку на классный документ, но по ней сообщается, что файл не найден.
Адрес разбирают и раскодируют. Выясняется, что в имени файла стоит косая черта, которую могли принять за разделитель пути, либо пробел скопировался неверно.
Вместо того чтобы вслепую править чужой закрытый адрес, учительница просит у владельца документа новую ссылку для доступа.
Ученики делают простую форму поиска и смотрят на адрес после отправки текста с пробелами и знаками препинания.
Они раскодируют значения параметров и сравнивают их с тем, что вводили в форму. Класс обсуждает, почему браузеры кодируют значения, прежде чем поместить их в адрес.
Настоящие пароли, ученические записи и личные ответы в упражнении не используются.
В ссылке из школьной рассылки несколько параметров отслеживания. Учитель хочет понять, что именно в ней передаётся, прежде чем делиться ею.
Адрес разбивают на параметры и раскодируют их значения. Лишние значения отслеживания убирают только тогда, когда это не ломает нужный адрес.
Готовую ссылку проверяют, а не считают рабочей просто потому, что её поправили вручную.
Класс информатики пробует поставить в адрес короткую фразу не на английском. В закодированном виде получается несколько процентных последовательностей, потому что символы UTF-8 могут занимать не один байт.
Ученики раскодируют всю последовательность и сверяют её с исходной фразой. Стоит убрать один закодированный байт — и появится символ замены или недопустимый текст.
Занятие показывает, что видимый символ далеко не всегда соответствует одному закодированному байту.
Разработчик ждёт пробел, а видит %2520. Последовательность %25 обозначает знак процента, поэтому один проход декодирования даёт %20, а следующий может дать пробел.
Он прослеживает, где значение закодировали дважды. Поток данных исправляют, вместо того чтобы снова и снова раскодировать каждый ввод.
В ссылке внутри параметра вроде 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 может занимать несколько закодированных байтов.
Скажем, буква с диакритикой или арабский символ появляются как цепочка из нескольких процентных кодов. Все нужные байты должны остаться на своих местах и быть прочитаны в правильной кодировке.
Если в результате видны символы замены, проверьте, не случилось ли следующее:
После декодирования зарезервированные символы способны изменить структуру. Разделите адрес на части и раскодируйте нужное значение.
Повторное декодирование превращает прежде безобидные данные в настоящие разделители или неожиданные пути. Выясните, откуда взялось несколько слоёв кодирования.
Замена %20 на пробел не покрывает ни все закодированные символы, ни последовательности UTF-8, ни испорченный ввод, ни правила для плюса. В коде используйте полноценный разборщик адресов или стандартный интерфейс.
Сначала раскодируйте его как текст. Посмотрите на схему, имя хоста, путь и параметры, а потом уже решайте, заходить ли туда.
%26 и & в разных контекстах оба обозначают амперсанд. Выбирайте декодер по тому представлению, которое перед вами на самом деле.
За знаком процента должны идти две шестнадцатеричные цифры. Незавершённые или неверные последовательности обычно говорят о повреждённом вводе.
Адреса попадают в историю браузера, журналы, аналитику, снимки экрана и пересылаемые сообщения. Учётным данным в строке запроса не место.
В раскодированных значениях встречаются символы с особым смыслом. Раскодированная косая черта влияет на путь, амперсанд меняет параметры, а угловые скобки превращаются в разметку, если их неаккуратно вставить в страницу.
Приложениям стоит:
Декодирование — это не очистка. Оно показывает представленные символы, но не решает, безопасны ли они для HTML, файловых путей, запросов к базе данных или переадресаций.
В адресе могут оказаться поисковые слова, идентификаторы документов, адреса почты, коды классов, имена файлов, данные отслеживания и многое другое. Декодирование делает всё это читаемым, но ничего оттуда не убирает.
Не вставляйте во внешний инструмент закрытые школьные ссылки, токены восстановления, подписанные адреса, ссылки на ученические записи и данные для входа. На уроках и при показе разбора заменяйте чувствительные значения выдуманными.
Прежде чем показать кому-то снимок экрана с раскодированным адресом, уберите имена учётных записей, внутренние хосты, токены и идентификаторы документов.
Начинающим лучше пользоваться готовыми интерфейсами для работы с адресами. В JavaScript значение запроса можно посмотреть так:
const url = new URL(
"https://example.edu/search?q=water%20cycle"
);
const query = url.searchParams.get("q");
console.log(query);
// water cycle
Такой подход разбирает адрес и возвращает уже раскодированное значение параметра. Обычно это безопаснее и понятнее, чем вручную резать всю строку по каждому вопросительному знаку, амперсанду и знаку равенства.
Возьмите инструмент URL-кодирования, чтобы подготовить текст как часть адреса, а потом раскодируйте его и проверьте учебный пример.
Если во вводе есть сущности вроде &lt; или &quot;, воспользуйтесь инструментом декодирования HTML. Для заведомо base64-текста подойдёт инструмент декодирования Base64.
Правильно выбранный декодер избавляет от лишних преобразований и делает разбор ошибок надёжнее.
URL-декодирование превращает процентные последовательности в читаемые символы. Оно помогает ученикам понять устройство веб-адресов, а разработчикам — разобрать значения запросов, обращения к API, многоязычный текст, переадресации и случаи двойного кодирования.
Надёжнее всего определить часть адреса, раскодировать только нужное и сохранить исходный текст. Результат стоит считать данными, которые ещё предстоит проверить.
Читаемую раскодированную ссылку легче изучать, но сама по себе она не становится ни безопасной, ни правильной. Проверьте её структуру, адрес назначения, параметры, приватность и предполагаемую кодировку символов, прежде чем ею пользоваться.