Просмотр Исходного

Carbon Reductor выполняет предварительную обработку списков перед тем как загрузить их в ядро.

Это сделано по той причине, что выносить нормализацию URL в runtime перед поиском в базе - очень затратно, поэтому в userspace генерируются некоторые возможные расхождения в поведении разных браузеров/библиотек по работе с URL, а затем все полученные варианты заносятся в ядро.

Возможно это немного смутит - например удаление домена 3 уровня www. у части ссылок.

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

Как редуктор потом ведёт себя с обработанными списками можно прочитать в статье [про обработку HTTP запросов.|reductor5:HTTP]