Манифест SUIP

Simple Unified Internet Protocol — Версия 0.1

«Интернет-протоколы, которые мы используем сегодня, несут на себе 30+ лет legacy-багажа. Что если начать с чистого листа, сохранив накопленный опыт, но оставив bloat позади?»

Проблема

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

Это не попытка заменить HTTP. Это исследование того, как мог бы выглядеть HTTP протокол, спроектированный сегодня с нуля.

Видение

SUIP (Simple Unified Internet Protocol) — экспериментальный протокол, построенный на четырёх принципах:

1. Простота прежде всего

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

2. Самоописываемость

Протокол должен объяснять сам себя. Клиенты должны уметь обнаруживать возможности сервера без внешней документации. Серверы должны объявлять, что они умеют.

3. Расширяемость без фрагментации

Расширения должны быть стандартизированными паттернами, а не ad-hoc добавками. CRUD API, стриминговый сервис и pub/sub система должны использовать узнаваемые, универсальные паттерны.

4. Дружелюбность к разработчикам

Если что-то сложно реализовать — это неправильно. Референсная реализация должна быть меньше 2000 строк. Спецификация должна быть ясной, краткой и практичной.

Протокол

SUIP использует фиксированный 12-байтный бинарный заголовок, за которым следует тело переменной длины:

Байт 0:    Версия протокола (0x01)
Байт 1:    Тип сообщения (REQUEST / RESPONSE / ERROR)
Байт 2:    Операция (FETCH / STORE / LIST / INFO)
Байт 3:    Статус-код (SUCCESS / NOT_FOUND / и т.д.)
Байт 4:    Тип контента (TEXT / BINARY / XML / STRUCTURED_PATH)
Байт 5:    Флаги (сжатие, keep-alive, приоритет)
Байты 6-7: Зарезервировано
Байты 8-11: Длина контента (big-endian)

Вот и всё. Никакой неоднозначности при парсинге. Никаких заголовков переменной длины. Никаких проблем с кодировкой текста.

Схема URL

suip://host[:port]/path

Порт по умолчанию: 2802. Транспорт: TCP.

Операции

КодИмяНазначение
0x01FETCHПолучить ресурс
0x02STOREСохранить ресурс
0x03LISTСписок доступных ресурсов
0x04INFOМетаданные ресурса

Статус-коды

КодИмя
0x00SUCCESS
0x01NOT_FOUND
0x02ACCESS_DENIED
0x03SERVER_FAULT
0x04INVALID_REQUEST
0x05UNSUPPORTED_OPERATION

Шесть статус-кодов. Это всё, что нужно для MVP.

Разметка

SUIP определяет минималистичную XML-разметку для контента:

<?xml version="1.0"?>
<page>
  <container>
    <text class="heading">Добро пожаловать в SUIP</text>
    <text>Простая страница без JavaScript, без CSS-фреймворков, без bloat.</text>
    <link href="suip://localhost/about.xml">Узнать больше</link>
  </container>
</page>

Четыре элемента: <page>, <container>, <text>, <link>. Всё остальное — расширения.

Расширения

Ядро протокола намеренно минималистично. Дополнительная функциональность добавляется через стандартизированные расширения:

Серверы объявляют свои возможности через /.well-known/capabilities. Клиенты адаптируются автоматически.

Чем SUIP не является

Чем SUIP является

Дорожная карта

Присоединяйся к эксперименту

SUIP — open source. Ты разработчик или просто аноним, любопытствующий о том, как работает интернет — добро пожаловать.