Накопилось прилично изменений в main'е, плюс исправил ошибку рендеринга. Время новой версии.
Предыдущая запись дневника разработки yah2g
Как я писал в предыдущей записи дневника разработки, meta начала активно индексировать Gemini через мой экземпляр прокси. Я добавил robots.txt и... и ничего. Ни через сутки, ни через неделю. Как индексировали, так и продолжают индексировать. В документации нашлась интересная ремарка о том, что их бот может игнорировать robots.txt:
https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/?_fb_noscript=1
Note that the FacebookExternalHit crawler might bypass robots.txt when performing security or integrity checks, such as checking for malware or malicious content.
Раз кравлеры от meta могут игнорировать robots.txt, значит я могу банить их по значению в User-Agent. Хорошо бы когда-нибудь сделать это настройкой.
В версии 0.6 не-gemini файлы (которые отдаются "как есть") сначала целиком читались в память, а затем так же целиком отсылались HTTP клиенту. Некрасиво и расточительно. Сделал чтение-запись кусками по 64 килобайта.
Честно говоря, какой-то ощутимой разницы на файлах в десятки мегабайт я не заметил. Но мне так спокойнее.
@vlnst@shitpost.poridge.club, администратор bloat.cat, заметил на своём экземпляре, что сервер довольно просто "завалить" запросами. Начали разбираться: действительно сервер переставал отвечать от нескольких параллельных запросов.
Я с самого начал был уверен, что выбрал базовый класс ThreadingHTTPServer для реализации HTTP сервера. Но, внимательно осмотрев код, выяснилось что это не так. Наследование от нужного базового класса решило проблему.
Буквально сегодня обнаружил проблему неправильного рендеринга заголовков, если после символа # нет пробела. Сверился со спецификацией - все "по стандарту". Значит правим код.
Кстати: по новому алгоритму обработки заголовков (в соответствии со спецификацией Gemini разметки) обрабатываются только заголовки первого, второго и третьего уровней. Заголовок "четвёртого" уровня станет заголовком третьего, а четвертый от начала строки символ # пойдет в текст заголовка.