JavaScript

Создание сервера Node.js для протокола Gemini, облегченного Интернета

Вы когда-нибудь слышали о Близнецах? Вот как это работает

Протокол Близнецов? Если вы никогда о нем не слышали, не волнуйтесь - это не многим известно. Протокол Gemini основан на неудовлетворенности Интернетом, который, как мы знаем, основан на протоколе HTTP.

Да, Близнецы, как я это назвал, - протокол. Это не часть Интернета - он работает по собственному протоколу и недоступен в обычных браузерах.
Но почему?

Близнецы не стремятся заменить привычный нам Интернет. Среди намеченных отличий от Интернета у Gemini есть:

  • Больше конфиденциальности и безопасности. Протокол требует использования TLS для шифрования. Не поддерживаются сложные типы данных, которые приводят к проблемам с конфиденциальностью, такие как файлы CSS или изображений. CSS - это проблема конфиденциальности? Ага, вот как сделать отслеживание пользователей только с помощью CSS.
  • Никаких сценариев вроде JavaScript на стороне клиента.
  • Минимальный протокол. Цель состоит в том, чтобы каждый мог жить в этом Интернете без единой команды. Например, невозможно кеширование или сжатие. Страницы в клиенте загружаются очень быстро, даже на старых машинах.
  • Минимальная основа для страниц - тип файла Gemini с минимальной разметкой.

Давайте разместим страницу Gemini на Node.js! Я не буду слишком углубляться в эксклюзивные функции Gemini, так как я сам в этом новичок.

Но сначала установка клиента Gemini

Я рекомендую использовать Amfora в качестве клиента - по крайней мере, я знаю, что он работает. В macOS вы можете установить его с помощью brew install amfora. Для других платформ ознакомьтесь с репозиторием GitHub. Для других поддерживаемых клиентов ознакомьтесь с этим официальным списком.

Если вы не хотите устанавливать что-либо на постоянной основе, существует рабочий клиент Python без сторонних производителей, содержащий примерно 100 строк кода. Просто скопируйте файл и запустите его с помощью Python.

Сборка нашего сервера

Существует множество серверных библиотек для создания сервера протокола Gemini. Есть даже один для Node.js, точнее, для Express.js.

Мы можем установить его с помощью npm install gemini-server.

Прежде чем писать код, нам нужно сгенерировать сертификат для шифрования. Как вы помните, я сказал, что Gemini заставляет использовать шифрование TLS. Генерация сертификатов проста. OpenSSL должен быть установлен по умолчанию в Linux и macOS. Вот инструкция по установке на Windows.

После установки OpenSSL на вашем компьютере запустите:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'

Затем у вас должно быть два файла сертификата. Давайте создадим наш экспресс-сервер.

Как видите, сервер обслуживает файл с именем test.gemini - для тестирования нам нужно его создать. Так называемый Gemtext довольно прост. Вот небольшой пример, содержащий заголовки, список и цитату курсивом:

# Hello world
## This is a subheading
* First list entry
* Second list entry
* Third list entry
> The best about the Gemini protocol is the fact you can’t use CSS.
- Everyone who ever touched CSS

Когда вы сохранили Gemtext как test.gemini, вы можете запустить свой сервер. Нет, нам не нужно указывать порт в функции app.listen - по умолчанию сервер будет работать на порту Gemini.

Запускаем node <your-server-file>.js - давайте посмотрим на наш сайт!

Теперь запустите своего клиента Gemini. Если вы, как и я, используете Amfora, откройте его в терминале, запустив amfora. После запуска просто нажмите пробел и введите следующий URL: gemini://localhost/

Очевидно, мы используем тот же URL в других клиентах Gemini. В рекомендованном мной Python-клиенте вы можете мгновенно ввести URL-адрес.

Затем должна появиться страница. В моем терминале это выглядит так:

Вот как легко создать страницу Близнецов! Если вы хотите разместить его у себя, это не станет намного сложнее. Поскольку любой порт сервера может быть доступен через домен, вы можете разместить страницу Gemini через свой существующий домен. Я обнаружил, что многие страницы в сети Близнецов являются копиями страниц в обычном Интернете с использованием того же домена. Поскольку у вас размещены два экземпляра Express, вы можете легко создать страницу в обоих интернет-сетях.

Больше контента на plainenglish.io