Carbon Reductor выполняет предварительную обработку списков перед тем как загрузить их в ядро.
Это сделано по той причине, что выносить нормализацию URL в runtime перед поиском в базе - очень затратно, поэтому в userspace генерируются некоторые возможные расхождения в поведении разных браузеров/библиотек по работе с URL, а затем все полученные варианты заносятся в ядро.
Возможно это немного смутит - например удаление домена 3 уровня www. у части ссылок.
Вот часть таких преобразований:
- дублирование в случае uppercase в Host.
- дублирование для некоторых ресурсов, имеющих несколько доменов. Пока хардкодом.
- Отрезание www. для некоторых доменов (в результате блокируются все субдомены).
- URL с точкой в конце Host лишаются этой точки, её проверка вынесена в ядро.
- Кириллические домены приводятся к IDNA-виду.
- Отсекается / в конце большинства URL.
- В случае с якорями (#something) URL дублируются с и без них.
- Кодировка GET-запроса, даже экранированного проходит с перебором.
- Для URL с HTTPS добавляется "дубликат" с доступом по HTTP.
- и ещё несколько обработок с достаточно частными случаями.
Как редуктор потом ведёт себя с обработанными списками можно прочитать в статье про обработку HTTP запросов.