LINUX.ORG.RU

Монстр из слияния Gemini и Spartan (попытка создать свой протокол)

 , , ,


2

6

В теме, посвященной «новым» браузерам, я упомянул недостатки протоколов Gemini и его упрощенного аналога Spartan. Представляю вашему вниманию еще один протокол, сделанный на коленке на основе вышеуказанных протоколов. Я ни на что не претендую и делаю это в качестве развлечения. Итак, я взял описание протокола Spartan и несколько подправил его. Протоколу дано временное название owl, чтобы обозначить его в ссылках. Временное - потому что с таким названием есть нечто, относящееся к NFT, а также игровой движок. И вот результат:

Описание протокола

1. Обзор
Протокол Owl - прикладной протокол передачи данных, попытка собрать нечто среднее из протоколов Gemini и Spartan. В качестве фундамента для Owl использован протокол Spartan.
Протокол использует для передачи данных TCP, и является текстовым. Подобно Gemini, Owl может использовать для шифрования TLS с схемой аутентификации TOFU и поддерживает пользовательские сертификаты для аутентификации. Как и в случае Spartan, для Owl в документах gemtext допустимо использование строки "=:" для пользовательского ввода, а также Owl имеет сходную модель запросов.
Owl использует 5 видов статусов в ответе на запрос: "Успешно выполненный запрос", "Перенаправление", "Ошибка сервера", "Ошибка клиента", "Необходимость в сертификате клиента".
Если шифрование не используется, то в URL протокол указывается как owlet://
Стандартный порт для owl - 288, для owlet - 289. Протокол является синхронным, в ответ на запрос клиента сервер передает ответ, после чего при статусе ответа "Успешно выполненный запрос" клиент передает данные (при их наличии), затем данные передает сервер (при их наличии).
2. Запросы.

Запрос клиента к серверу в Owl представляет собой строку текста в кодировке UTF-8, которая предстает в следующем виде

URL [символ горизонтальной табуляции] [опциональный блок, используемый для получения части данных] [размер блока данных в байтах] CRLF [блок данных - передается серверу после получения ответа со статусом успешно выполненного запроса]

[опциональный блок, используемый для получения части данных] =  [диапазон в байтах в виде двух чисел разделенных символом "дефис" или числа и символа точки][символ пробела]

Блок данных в конце запроса является опциональным, при его отсутствии размер блока данных должен быть указан как "0". Тип данных может быть как бинарным, так и текстовым или смешанным. Клиент не указывает тип данных, сервер должен сам его определить исходя из контекста.
Порт в url указывается, если он отличается от порта по умолчанию. Размер запроса без данных не должен превышать 1024 байт.

Примеры запросов:
-- Скачивание txt файла
owl://example.com/1.txt	0

-- Отправка данных серверу (комментарий к статье на русском языке)

клиент: owl://example.com/articles/1/comment	20
сервер: 2	gemini/text; lang=ru
клиент: Привет мир!
сервер: [текст статьи с комментариями]

-- Отправка данных серверу (комментарий к статье на английском языке)

клиент: owl://example.com/articles/1/comment	12
сервер: 2	gemini/text; lang=en
клиент: Hello world!
сервер: [текст статьи с комментариями]

--Отправка на сервер музыкального файла

клиент: owl://example.com/upload/music.ogg	1205328
сервер: 2	none	0
клиент: [бинарные данные]

--Запрос статьи от сервера, использующего нестандартный порт

owl://example.com:90/articles/1	0

Также клиент может запросить от сервера только часть данных, указав диапазон в байтах в виде двух чисел разделенных символом "дефис". Использовать символ точки вместо второго числа можно, если данные необходимо получить частично начиная с байта указанного первым числом и до конца данных. 

Примеры запросов:

owl://example.com/music/spring.mp3	14721-872345 0

owl://example.com/music/spring.mp3	14721-. 0


3. Ответ на запрос

Ответ сервера состоит из одной строки в кодировке UTF-8  и имеет следующий вид:

-- Код ответа 2 - "Успешно выполненный запрос"

2 [символ горизонтальной табуляции] [тип данных] [дополнительный опциональный блок] CRLF [данные от сервера]

Дополнительный опциональный блок в ответе содержит символ горизонтальной табуляции и следующее за ним число, указывающее на размер данных от сервера в байтах.
Данные от сервера клиенту начинают передаваться после завершения получения данных от клиента, если таковые имеются. 

Сервер может в некоторых ситуациях не передавать данные в ответ на запрос клиента. В этом случае ответ сервера будет выглядеть следующим образом:

сервер: 2	none	0

В этом случае соединение будет закрыто при завершении получения данных от клиента или сразу после ответа сервера при отсутствии клиентских данных.

-- Код ответа, начинающийся на 3 - "Перенаправление"
При этом код может быть расширен до 30 (Временное перенаправление) или 31 (Постоянное перенаправление), однако это не является обязательным. URL может быть как абсолютным, так и относительным по отношению к URL, использованным в запросе клиента.

3 [символ горизонтальной табуляции] URL CRLF

-- Код ответа, начинающийся на 4, указывает на ошибку клиента. Ответ содержит человекочитаемый текст, объясняющий характер ошибки.

4 [символ горизонтальной табуляции] [сообщение об ошибке] CRLF

--Код ответа, начинающийся на 5, указывает на ошибку сервера. Ответ содержит человекочитаемый текст, объясняющий характер ошибки.

5 [символ горизонтальной табуляции] [сообщение об ошибке] CRLF

--Код ответа, начинающийся на 6, указывает на необходимость в сертификате клиента (передается на этапе установления соединения с шифрованием в рамках протокола TLS), в этом случае клиент повторяет запрос, но предоставляет сертификат. Если клиент предоставил сертификат, но все равно получил этот ответ, это означает, что сертификат не был принят, в этом случае ответ может содержать   человекочитаемый текст, объясняющий характер ошибки.
Код этой ошибки может быть получен только при использовании шифрования.

6 [символ горизонтальной табуляции] [при необходимости - сообщение об ошибке] CRLF


Примеры запросов и ответов на них

клиент: owl://example.com/helloworld.txt	0
сервер: 2	text/plain; charset=utf-8	12
сервер: Hello world!

owl://example.com/helloworld.txt	0
3	owl://example2.com/helloworld.txt

owl://example.com/helloworld.txt
4	Неправильно составлен запрос

owl://example.com/helloworld.txt	0
5	Внутренняя ошибка сервера

owl://example.com/helloworld.txt	0
6	Неверный сертификат

4. Формат документа.

Owl использует в качестве предпочтительного тот же формат документов, что и Spartan - модифицированный text\gemini.
В частности, от стандартного text/gemini формат документов Spartan отличается наличием дополнительной строки ":=" для ввода пользовательских данных. Вид вводимых данных (текст, файл) определяется клиентом.

=:[пробел]<URL>[пробел человекочитаемое представление ссылки]

5. URL
Структура URL для owl напоминает структуру URL для http.
scheme://userinfo@host:port/path;parameters?query#fragment
Согласно стандартам пробелы в URL должны быть представлены как "%20", однако протокол способен работать с "настоящим"  пробелом, поэтому его появление в запросе не должно быть расценено как ошибка.
Соответствия URL запросам

owl://example.com => owl://example.com	0
owl://example.com/1 => owl://example.com/1	0

owl://example.com?a=1&b=2 =>
owl://example.com	7 
a=1&b=2

owl://example.com/my%20file.txt =>
owl://example.com/my%20file.txt	0

Если вы дочитали до этого момента, то от вас требуется критика, пожелания, а возможно, свой вариант протокола. Воспринимайте данный протокол как нечто несерьезное, планов построить свою гипертекстовую сеть у меня нет. Что касается самого протокола, у меня есть сомнения в отношении правильности некоторых решений. Во-первых, в том как формируется запрос для получения части данных. Во-вторых, следует ли использовать табуляцию для разделения разных элементов в запросах и ответах. В третьих, как следует поступать с пробелом в URL.

★★★★★

Последнее исправление: hobbit (всего исправлений: 12)

Owl использует в качестве предпочтительного тот же формат документов, что и Spartan - модифицированный text\gemini.

А как с нескучной разметкой..? Например, позиционировать элемент на сколько-то пикселей левее/правее. Кнопку нажимаешь и она переливается определёнными цветами. Можно встроить аллиасы на определённые спецэффекты переливания.

DanilaZabiakaa
()
Ответ на: комментарий от DanilaZabiakaa

Это протокол - ему без разницы, что передавать.

Можно сделать гипертекст даже с помощью Latex - но кому-то придеться писать под это браузер. И это точно буду не я. Text/gemini (gemtext) очень простой. Настолько, что написать скрипт для его вывода в терминал можно за вечер.

Leupold_cat ★★★★★
() автор топика
Последнее исправление: Leupold_cat (всего исправлений: 1)
Ответ на: комментарий от Leupold_cat

Настолько, что написать скрипт для его вывода в терминал можно за вечер.

Вот бы браузер с консольной вёрсткой)). Скажем, сайты будут выглядеть как программы под DOS, но при этом поддерживать какое-то форматирование, переливания.

DanilaZabiakaa
()

Временное - потому что с таким названием есть нечто, относящееся к NFT, а также игровой движок

Пойди в ногу со временем, назови «Сова» и «Совёнок».

TLS

Смысл избавиться от CA определённо есть, но сам X.509 тоже византский ужас, так-то.

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от DanilaZabiakaa

сайты будут выглядеть как программы

^this

Браузер суть wget+виртуальная машина, а сайт делает что хочет в пределах своей песочницы.
И это было бы просто бредом, если бы разговоры про это на конференциях по некстген вебу не шли.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

виртуальная машина

А можно машинку. Но, скажем, с уделением внимания фишкам, типа презетов декораций. PowerPoint вот имеет нескучные эффекты перехода между слайдами, а браузер может нескучную дефолтную анимацию перехода между страницами сделать, которую могут настроить разрабы.

DanilaZabiakaa
()

я упомянул недостатки протоколов Gemini и его упрощенного аналога Spartan. Представляю вашему вниманию еще один протокол, сделанный на коленке на основе вышеуказанных протоколов

Некто Богдан Титомир в своё время рассказывал журналистам, что скрестил рэп с хип-хопом… (ТС, прости, не удержался, я понимаю, аналогия наркоманская, но почему-то всплыла первым делом).

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Leupold_cat

Text/gemini (gemtext) очень простой. Настолько, что написать скрипт для его вывода в терминал можно за вечер.

Тогда интересно, для чего же ещё понадобилась его упрощённая версия?

hobbit ★★★★★
()
Ответ на: комментарий от JleHb

Нифига непонятно,как собирать. Что еще за gclient, где его взять?

Dog ★★★
()
Ответ на: комментарий от JleHb

Прикольно, но «альтернативные», «построенные с нуля» браузеры, которые работают с текущим вебом, будут проигрывать обычным браузерам.

Другое дело, если браузер с другим форматом вёрстки, который делается заново.

DanilaZabiakaa
()
Ответ на: комментарий от DanilaZabiakaa

Дядь, кто тебе верстать будет? Тут мы и попадаем, что надо вперёд, а не назад. Если модно, то тогда кому надо и делать будут.

JleHb
()
Ответ на: комментарий от hobbit

Gemtext - это язык разметки, в конкретном случае его можно рассматривать как аналог html и упрощению он не подвергается.

Leupold_cat ★★★★★
() автор топика
Ответ на: комментарий от Leupold_cat

С ними сложнее работать и обеспечить одинаковое поведение в разных реализациях. Бинарные фонматы эффективнее обрабатывать.

X512 ★★★★★
()
Ответ на: комментарий от DanilaZabiakaa

Переливается из пустого в порожнее.

spqr ★★★
()
Ответ на: комментарий от spqr

Разве? Как раз обработка HTML/CSS у разных браузеров сильно отличается и один сайт работающий с одним браузером может разъехаться на другом. SVG тоже может криво показываться.

X512 ★★★★★
()

Стопудов опять изобретут HTTP.

Собственно, я не очень понимаю, почему просто не взять HTTP 1.1 и не выкинуть всё лишнее.

hateyoufeel ★★★★★
()

Чего я так и не могу понять - зачем это всё нужно? Почему не годится старый добрый http?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Студенты и школьники генерируют творческие задания, мутят проекты, решают задачи по кодингу, кто-то пилит новые сайты, приложухи для плей маркета.

Разработать свою вёрстку / протоколы - чем не нормальная дипломная работа?

DanilaZabiakaa
()
Ответ на: комментарий от Leupold_cat

В хобби должна быть какая-то целесообразность, рациональ. Ну то есть понятно, когда люди for fun пытаются сделать что-то, чего нет «из коробки» в готовой продукции. А тут оно какое-то бессмысленное и беспощадное... )

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

В хобби должна быть какая-то целесообразность, рациональ.

Информационные технологии в целом рациональная вещь (компилятор ругаться будет), по крайней мере математически. Телеграм позиционирует как покрывание потребности в быстром удобном безопасном мессенджере, есть менее функциональные irc, но кому-то и они заходят, большего не требуется. Есть возможность непрерывно и почти бесплатно общаться по видеочату с кучей людей мира, но кто-то голосовухи выбирает или текст.

Так что и альтернативный интернет со своей разметкой кому-то нужон.

DanilaZabiakaa
()
Ответ на: комментарий от Manhunt

Тем более сейчас идут новости о том, что куча программистов даже из топовых американских компаний увольняются..) Видимо, отпустили в свободное плаванье, чтобы делали что-то своё)

DanilaZabiakaa
()
Ответ на: комментарий от Manhunt

В теме, где я впервые выразил желание создать новый протокол, вы писали о том, что документацию на английском языке можно создать начиная с перевода с русского с помощью Google translate. Как вам кажется, представленный мною текст подходит для перевода?

Leupold_cat ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

тут оно какое-то бессмысленное и беспощадное... )

Оно сознательно ограниченное by design, этим и хорошо.
Я вот всё никак не сподоблюсь поднять бложек в gemini, хотя захожу почитать свежие посты в агрегаторах почти каждый день.

devl547 ★★★★★
()
Ответ на: комментарий от DanilaZabiakaa

Какой язык разметки вы хотели бы видеть в гипертекстовых документах?

Leupold_cat ★★★★★
() автор топика
Ответ на: комментарий от DanilaZabiakaa

Типа, рынок медиаплееров уже заполнен?

spqr ★★★
()
Ответ на: комментарий от X512

Так относительно html никто и не обещал, что всё будет выглядеть одинаково, мало того, это скорее нежелательно.

spqr ★★★
()
Ответ на: комментарий от Manhunt

Жаль. Впрочем, все равно не было шансов, что Сова смогла бы получить известность хотя бы за пределами этой темы.

Leupold_cat ★★★★★
() автор топика

Но зачем? Имхо проблема веба не в протоколе, а в способе разработки и общепринятых практиках (микрохтмл грузит метры жс который делает реальный хтмл)

upcFrost ★★★★★
()
Ответ на: комментарий от alex1101

Текстовые протоколы нинужны

Сказал фрактал, использовав текстовый протокол для отправки своего ненужного комментария.

cocucka ★★★★☆
()
Ответ на: комментарий от alex1101

Сегодня День борьбы с тупняком в интернете.

cocucka ★★★★☆
()
Ответ на: комментарий от Leupold_cat

Впрочем, все равно не было шансов, что Сова смогла бы получить известность хотя бы за пределами этой темы.

Почему? Аж 5 человек подписано на тему! Единственное, что как-то исторически русские не очень хорошо тянут темы, которые «покоряют весь мир», майкрософты и гуглы тоже не у нас. Можем какую-то идею подать, которая в дальнейшем приживётся.

Альт протокол-разметка нужны, скажем, как консольные программы вместо GUI. Есть потребности, скажем, почитать форумнообразное, чтоб красивости какие-то были. Это не обязательно значит, что нужно запускать софтину-движки от мегакорпораций с гигабайтами RAM.

У хтмл-веба нет особых лимитов и единой стилистики (как у прог с виндуз-формами или ms dos). Веб на консольных эффектах (когда рисовать можешь не пикселями, а символами) был бы по-своему прикольным.

DanilaZabiakaa
()
Ответ на: комментарий от DanilaZabiakaa

Потому что тогда следующим шагом я должен писать сервер и клиент. Но я не программист, мои приложения, даже будучи рабочими, будут иметь очень плохой код.

Leupold_cat ★★★★★
() автор топика
Ответ на: комментарий от interrupted

gemini://gemini.circumlunar.space/capcom/
gemini://calcuode.com/gmisub-aggregate.gmi
gemini://nytpu.com/feed.gmi
gemini://skyjake.fi/~Cosmos/
gemini://warmedal.se/~antenna/

Ну и до кучи gopher
gopher://i-logout.cz:70/1/bongusta/

devl547 ★★★★★
()

Тут проблема в том, что ты начал с другого конца.

Для начала предлагаю описать минусы https?, оттуда и плясать. Я внимательно прочитал все пункты описания твоего протокола, и не увидел ничего, чем бы оно особо отличалось от https?, кроме номеров портов и прочих мелочей.

Итого, в чем смысл?

//то что данила дендимен ниже пишет - дичь, конечно.

easybreezy
()
Ответ на: комментарий от DanilaZabiakaa

Почему
Альт протокол-разметка

Потому что это две разные вещи, о чем ты конечно не знаешь.

easybreezy
()
Ответ на: комментарий от easybreezy

Я не предлагаю протокол на замену https, я лишь предложил протокол, который на мой взгляд лучше gemini и spartan.

Почему появилось gemini? Основной смысл проекта в появлении легкой гипертекстовой сети. Как мне кажется, в том числе ее легкость обеспечивается несовместимостью с большими браузерами, что вынуждает делать новые легкие программы. Помимо этого, такая сеть дает разработчикам полигон для экспериментов, так как они могут, если захотят, к примеру, опробовать новые языки разметки.

Leupold_cat ★★★★★
() автор топика
Последнее исправление: Leupold_cat (всего исправлений: 3)
Ответ на: комментарий от Leupold_cat

протокол, который на мой взгляд лучше gemini и spartan.

Слушай, ну ведь есть уже такой протокол, и это https?.

Я предлагаю начать с описания его минусов, это было бы полезнее и разумнее.

ее легкость обеспечивается несовместимостью с большими браузерами, что вынуждает делать новые легкие программы.

Говорю же, ты с другой стороны начал. Есть много лёгких http клиентов, тысячи их. Есть даже жирный курл, который все равно реактивный. Зачем вы ищете другой протокол, а потом реализуете новый точно такой же?

Ваши претензии к вебу не касаются протокола! Возьми https? и гони по нему какие угодно данные, зачем вы туда мешаете html, js и прочее? Я по https (ну теперь на куик перехожу) гоняю бинарные данные и мне норм.

С вами что не так? С Данилой понятно, а с тобой не очень.

easybreezy
()
Ответ на: комментарий от Leupold_cat

Почему появилось gemini? Основной смысл проекта в появлении легкой гипертекстовой сети. Как мне кажется, в том числе ее легкость

У меня между некоторыми серверами гоняется лёгкий http в чистом виде и я не могу представить, что может быть легче.

easybreezy
()
Ответ на: комментарий от Leupold_cat

Почему появилось gemini?

Потому что nih без преимуществ. Ограничения - это не преимущество.

Данила вон брал эмулятор консолей, вырезал оттуда фичи, и релизил - вот это все точно такое же.

Когда разберётесь (я не про тебя, а про всех сторонников нового веб) с тем, чем оно лучше http - пишите. Желательно сразу с бенчмарками, а не с историями «кхе-кхе, мы поменяли 80 и 443 порты на новые и префикс ещё новый запилили, дальше хз».

easybreezy
()
Ответ на: комментарий от easybreezy

с тем, чем оно лучше http - пишите.

Https не имеет серьезных недостатков и нельзя сказать, что он в чем-либо хуже. Но если говорить о разнице между протоколами, то https не поддерживает пользовательские сертификаты, полагается на центры сертификации, многословен, разделяет запросы на get и post.

Leupold_cat ★★★★★
() автор топика
Последнее исправление: Leupold_cat (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.