Задача: Перепроверить обработку 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-значением либо наоборот.

Что проверить

  1. Проследить полный путь URL от HTTP request до поиска сущности по slug:
    • framework/router;
    • route params;
    • server/API handler;
    • запрос в БД;
    • генерация canonical URL/ссылок.
  2. Проверить, на каком этапе %22 и другие percent-encoded символы декодируются автоматически, а где требуется явный decode.
  3. Не допустить двойного декодирования (decodeURIComponent поверх уже decoded param), особенно для %, %25, %2F и других чувствительных последовательностей.
  4. Сверить формат slug в БД: хранится ли он decoded, encoded или нормализованный.
  5. Проверить генератор ссылок: URL должен кодироваться ровно один раз (encodeURIComponent/URL API там, где это необходимо).
  6. Отдельно проверить символы:
    • кавычки " / %22;
    • запятые;
    • пробелы / %20;
    • кириллицу;
    • %;
    • ?, #, / внутри потенциального slug.
  7. Проверить старые уже опубликованные 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.