Вот и прошло более четырех месяцев с предыдущего релиза. Этот проект мне нравится, надеюсь я найду силы на то, что бы возвращаться к нему не только при обнаружении проблем.
Предыдущая запись блога разработки
Что нового в версии 0.1.2:
В своей капсуле я использую относительные ссылки. Например ссылка на эту страницу из index.gmi в этой же директории будет выглядеть просто указанием имени файла:
=> 0.1.2.gmi v0.1.2 (2024-01-14)
Но если открыть директорию без слеша на конце, то Gemini клиент (ни AV-98, ни amfora) не сможет корректно обработать такую ссылку:
$ av98 gemini://any-key.press/vostok/reports Welcome to AV-98! Enjoy your patrol through Geminispace... Блог разработки сервера vostok [1] v0.1.2 (2024-01-14) [1] v0.1.1 (2023-10-07) [2] v0.1.0 (2023-09-06) [3] v0.0.2 (2023-08-23) [4] v0.0.1 (2023-08-17) AV-98> 1 ERROR: Not found
Проблема проявляется, например, при использовании команды up у Gemini клиента AV-98:
$ av98 gemini://any-key.press/vostok/reports/ <...> AV-98> up <...> AV-98> url gemini://any-key.press/vostok
Поэтому Gemini сервер на своей стороне должен реагировать на открытие директории без разделителя (слеша) на конце и перенаправлять Gemini клиент на корректный URL. Как, например, это делает geminiprotocol.net:
$ echo "gemini://geminiprotocol.net/docs" | openssl s_client -crlf -quiet -connect geminiprotocol.net:1965 2> /dev/null 31 gemini://geminiprotocol.net/docs/
Постоянно забываю: как называется когнитивное искажение, когда начав вариться в какой-то проблеме начинает казаться, что все вокруг только о ней и говорят?) Часто ловлю себя на этом и текущий случай не исключение. Omar Polo, автор Gemini сервера gmid, в самый разгар моей работы над фиксом прокомментировал проблему в независимом треде:
my server returns absolute URIs (again, without the hostname) for redirects to directories (i.e. /posts -> /posts/)
https://bsd.network/@op/111917977768163064
Сделать небольшой фикс для сервера Vostok не получилось. Нужно сохранять признак наличия разделителя (слеша) на конце URL из запроса. Я реализовал это оставлением слеша в конце пути запроса, если он там был до нормализации URL. Функция открытия файл была упрощена до небольшой обёртки над openat. Это приводит к тому, что код сервера вызывает её дважды для директорий: первый раз для открытия самой директории, а второй раз для относительного открытия файла index.gmi. Это позволило между первым и вторым вызовами, если открывается директория и запрашиваемый URL не имеет на конце слеша, вернуть код перенаправления (31), но указав путь с разделителем на конце в meta.
Комментарии через ActivityPub (Fediverse) можно оставить здесь: