Задача: Перепроверить обработку URL и декодирование спецсимволов
Перепроверить обработку URL и декодирование спецсимволов
Проверить 404 на URL со спецсимволами и корректность decode/slug routing.
Проблема
На freecode.academy некоторые URL с percent-encoded спецсимволами могут отдавать 404, хотя соответствующая страница, вероятно, существует.
Пример:
/comments/topics/dzheneriki-typescript/nu-vot-ts-tebe-govorit-%22ty-zanimaeshsya-figney%22,-i
Гипотеза: на одном из этапов роутинга, поиска записи по slug или сопоставления URL отсутствует/некорректно выполняется URL decoding (decodeURIComponent или эквивалент), из-за чего slug сравнивается в encoded-виде с сохраненным decoded-значением либо наоборот.
Что проверить
- Проследить полный путь URL от HTTP request до поиска сущности по slug:
- framework/router;
- route params;
- server/API handler;
- запрос в БД;
- генерация canonical URL/ссылок.
- Проверить, на каком этапе
%22и другие percent-encoded символы декодируются автоматически, а где требуется явный decode. - Не допустить двойного декодирования (
decodeURIComponentповерх уже decoded param), особенно для%,%25,%2Fи других чувствительных последовательностей. - Сверить формат slug в БД: хранится ли он decoded, encoded или нормализованный.
- Проверить генератор ссылок: URL должен кодироваться ровно один раз (
encodeURIComponent/URL API там, где это необходимо). - Отдельно проверить символы:
- кавычки
"/%22; - запятые;
- пробелы /
%20; - кириллицу;
%;?,#,/внутри потенциального slug.
- кавычки
- Проверить старые уже опубликованные URL и обратную совместимость. Если существуют разные исторические варианты одного slug — при необходимости добавить redirect/canonical normalization вместо 404.
Конкретный кейс
Для URL:
/comments/topics/dzheneriki-typescript/nu-vot-ts-tebe-govorit-%22ty-zanimaeshsya-figney%22,-i
нужно выяснить:
- существует ли запись с логически соответствующим slug;
- какое значение route param получает приложение фактически;
- какое значение используется в запросе к БД;
- исправляется ли 404 после корректной нормализации/decode.
Критерии приемки
- Найдена точная причина 404 для приведенного URL.
- URL со спецсимволами корректно открывают существующие страницы.
- Нет двойного decode и связанных с ним ошибок/исключений.
- Генерация ссылок и чтение route params используют согласованный формат slug.
- Некорректные URL по-прежнему возвращают корректный 404, а не приводят к ошибке приложения.
- Добавлены тесты минимум на
%22, кириллицу и%25/двойное кодирование. - Проверена обратная совместимость существующих ссылок; при необходимости добавлен redirect на canonical URL.
Ворклоги
Прогресс: исправление выкачено
Исправления по обработке URL уже выкачены в production. Ожидается, что после этого будет устранено большинство ложных 404, связанных с percent-encoded URL и отсутствующим декодированием.
Следующий обязательный контрольный шаг — после накопления новых запросов повторно проверить внутренние логи на наличие 404 и убедиться, что массовая проблема действительно исчезла, а оставшиеся 404 относятся к отдельным кейсам.
Для этого создана связанная дочерняя задача с плановым выполнением 29 августа 2026.