Веб держится на точных соглашениях. Поле Content-Length должно означать одно и то же на каждом узле. Кеш не должен повторно использовать ответ, который требует проверки. Некорректно сформированная секция поля HTTP/3 должна приводить к сбою в правильной области. Безопасный метод должен оставаться безопасным после прохождения через обратный прокси.
Webship 1.3.1 построен вокруг одного правила: скорость имеет значение только тогда, когда байты сохраняют свой смысл.
Вот почему мы описываем Webship как наиболее совместимый с RFC веб-сервер общего назначения в мире. Это инженерное утверждение с видимой границей, а не утверждение о том, что каждая необязательная функция в каждом RFC присутствует. На карте ниже указаны 52 RFC, которые влияют на активное поведение сервера Webship или его собственные протокольные основы. Текущие стандарты указаны первыми. Заменённые документы обозначены как совместимая наследственность. Черновые спецификации не переназначаются как RFC.
Совместимость — это поведение, а не награда
Webship применяет стандарты в тех местах, где производственные серверы чаще всего становятся неоднозначными:
- Форматирование HTTP/1.1 отклоняет противоречивые длины, недопустимые типы передачи, слишком большие целевые запросы, неправильно сформированные фрагменты и формы атак на обход запросов.
- HTTP/2 и HTTP/3 отклоняют запрещённые поля соединения, проверяют псевдополя, ограничивают сжатые секции полей и отделяют ошибки потоков от ошибок соединения.
- Статические файлы сохраняют семантику HEAD, валидаторы, порядок предусловий, диапазоны байтов, перенаправления и типы содержимого.
- Обратный прокси сохраняет кадрирование, отмену, трейлеры, обновления, безопасные повторные попытки и идентификацию при передаче, при этом удаляя поля, относящиеся к отдельным узлам.
- Кэш вычисляет возраст, свежесть, повторную проверку, Vary, правила аннулирования и использования устаревших данных, а не рассматривает кэширование как ярлык для ключ-значение.
- TLS, QUIC, ACME, ранние данные и WebTransport используют ограниченное состояние и явную политику обработки ошибок.
Те же правила применяются и на быстром пути. Webship не определяет один «правильный» путь и другой эталонный путь.
Семантика HTTP, кадрирование, кэширование и проксирование
- RFC 3986 — Унифицированный идентификатор ресурса (URI): Общий синтаксис. Webship нормализует относительные ссылки Location и Content-Location, включая сегменты с точками, перед принятием решений о недействительности кэша.
- RFC 6455 — Протокол WebSocket. Апгрейды через реверс-прокси проверяют ключ WebSocket, значение accept, субпротокол, расширения и переход туннеля.
- RFC 6585 — Дополнительные коды состояния HTTP. Для полей запроса, превышающих допустимый размер, используется определённый ответ 431, если отправка HTTP-ответа всё ещё возможна.
- RFC 6797 — HTTP Strict Transport Security. Заголовок Strict-Transport-Security отправляется только через защищённый канал и никогда не просачивается из кэшированной записи, не зависящей от транспорта, на открытый HTTP.
- RFC 7235 — Аутентификация HTTP/1.1. Токены схемы аутентификации разбираются без учета регистра, включая защищенную управляющую поверхность MCP. Их общая семантика HTTP теперь описана в RFC 9110.
- RFC 7239 — Расширение HTTP Forwarded. Операторы могут выбрать стандартизированное поле Forwarded, устаревшие поля X-Forwarded, оба варианта или ни один; ненадежные входящие поля идентификации удаляются в первую очередь.
- RFC 7540 — HTTP/2. Это сохраняется как линия совместимости HTTP/2; активным контрактом HTTP/2 является его последующий документ, RFC 9113.
- RFC 7541 — HPACK: Сжатие заголовков для HTTP/2. Стек HTTP/2, принадлежащий Webship, ограничивает состояние декодера и таблицы кодировщика, при этом сохраняя формат передачи HPACK и кодирование Хаффмана.
- RFC 7838 — Альтернативные сервисы HTTP. Alt-Svc объявляет конечную точку HTTP/3 без изменения происхождения, представленного URL.
- RFC 8441 — Начальная настройка WebSockets с помощью HTTP/2. Webship поддерживает расширенную основу согласования CONNECT для нисходящего потока. Он не утверждает, что восходящий HTTP/1.1 поток реализует расширенный CONNECT HTTP/2; неподдерживаемые комбинации восходящих потоков завершаются с явной ошибкой.
- RFC 8470 — Использование ранних данных в HTTP. Ранние запросы, которые Webship не будет обрабатывать, получают ответ 425 Too Early вместо того, чтобы обрабатываться с небезопасными предположениями о повторной передаче.
- RFC 8941 — Структурированные значения полей для HTTP. Значения приоритета HTTP используют разбор словаря структурированных полей; неправильно сформированные необязательные поля полностью игнорируются.
- RFC 9110 — Семантика HTTP. Методы, коды состояния, поля, валидаторы, предуслования, перенаправления, метаданные содержимого, HEAD, CONNECT, OPTIONS и семантика диапазонов имеют один текущий контракт для всех версий протокола.
- RFC 9111 — HTTP Кэширование. Webship реализует скорректированный возраст, явную свежесть, Vary, only-if-cached, must-revalidate, proxy-revalidate, безопасное использование устаревших данных и инвалидизацию эффективных и связанных URI.
- RFC 9112 — HTTP/1.1. Правила request-line, field, body-length, transfer-coding, chunk, trailer, persistence и close-delimited применяются до передачи управления приложению.
- RFC 9113 — HTTP/2. Псевдополя order, authority, запрещённые поля соединения, ограничения TE, жизненный цикл потока, управление потоком, GOAWAY и область ошибок обрабатываются H2-путём, принадлежащим Webship.
- RFC 9114 — HTTP/3. Webship владеет путями запроса, управляющего потока, SETTINGS, критического потока, отмены и ошибок потока против соединения, используемыми его сервером HTTP/3.
- RFC 9204 — QPACK: сжатие полей для HTTP/3. Вместимость динамической таблицы ограничена объявленным пределом, потоки инструкций остаются разбираемыми при нулевой вместимости, а недопустимое состояние становится требуемой ошибкой QPACK.
- RFC 9218 — Расширяемая схема приоритизации для HTTP. Срочность и поэтапная доставка направляют планирование HTTP/3, в то время как неизвестные параметры приоритета остаются расширяемыми.
- RFC 9220 — Инициализация WebSockets с использованием HTTP/3. Webship реализует основу SETTINGS расширенного CONNECT HTTP/3, используемую современными туннелированными протоколами; это не подразумевает, что каждый возможный протокол CONNECT принимается.
- RFC 9297 — HTTP-датаграммы и протокол капсул. Сессии WebTransport используют ограниченное декодирование капсул и ассоциацию HTTP-датаграмм, при этом неизвестные капсулы обрабатываются как точки расширения, а не как ошибки парсера.
- RFC 9421 — Подписи HTTP-сообщений. Дополнительная проверка происхождения ответа с использованием Ed25519 может охватывать выпуск Webship и идентификацию конфигурации без замены TLS или аутентификации приложения.
- RFC 10008 — Метод HTTP QUERY. Webship рассматривает QUERY как безопасный и идемпотентный, сохраняет его тело при проксировании, включает тело и метаданные представления в идентификатор кэша, запрещает эвристическую свежесть, поддерживает условное поведение и поведение с диапазоном, и никогда не инвалидирует кэш просто из-за использования QUERY.
Транспорт QUIC и управление перегрузкой
- RFC 3465 — Управление перегрузкой TCP с использованием подсчёта подходящего количества байт. Логика подсчёта подходящего количества байт является частью линии управления перегрузкой NewReno, используемой в реализации QUIC компании Webship.
- RFC 4303 — IP Encapsulating Security Payload. Webship не реализует IPsec ESP; его дубликатор пакетов QUIC использует технику скользящего окна против повторной отправки из RFC только как основу для реализации.
- RFC 5681 — Управление перегрузкой TCP. Пороги потерь и перестановок наследуют установленные ограничения управления перегрузкой, где QUIC строится на практике TCP.
- RFC 6298 — Вычисление таймера повторной передачи TCP. Расчеты усредненного времени кругового обхода и дисперсии вносят вклад в модель восстановления QUIC.
- RFC 8312 — CUBIC для быстрых сетей на большие расстояния. Это более ранняя спецификация CUBIC, сохранённая как наследие алгоритма; RFC 9438 является текущим стандартом.
- RFC 8899 — Обнаружение MTU пути уровня пакета для датаграммных транспортов. Настраиваемое DPLPMTUD определяет пригодный размер датаграммы QUIC без зависимости от ненадёжных сигналов сетевого уровня.
- RFC 8999 — Независимые от версии свойства QUIC. Длинные заголовки, идентификаторы соединений, согласование версий и инвариантный разбор остаются безопасными до запуска декодера, специфичного для версии.
- RFC 9000 — QUIC: Многоплексированный и защищённый транспорт поверх UDP. Идентификаторы соединений, потоки, управление потоком, миграция, проверка адреса, Retry, безсостояночный сброс, параметры транспорта и поведение при закрытии формируют транспортную основу HTTP/3 в Webship.
- RFC 9001 — Использование TLS для защиты QUIC. Начальные секреты, защита пакетов, защита заголовков, целостность Retry, ключевые фазы и интеграция TLS следуют правилам QUIC-TLS.
- RFC 9002 — Обнаружение потерь и управление перегрузками в QUIC. Пространства номеров пакетов, подтверждения, PTO, обнаружение потерь, восстановление и учёт перегрузок обеспечивают надёжность транспорта.
- RFC 9221 — Расширение ненадёжных дейтаграмм для QUIC. Согласованные кадры QUIC DATAGRAM передают ненадёжный трафик WebTransport без преобразования его в содержимое потока.
- RFC 9287 — Смазывание бита QUIC. Смазывание бита QUIC снижает окаменение при сохранении безопасности согласования.
- RFC 9308 — Применимость транспортного протокола QUIC. Операционные параметры по умолчанию, такие как ограниченное время бездействия и рекомендации по развертыванию, определяют производственную транспортную политику Webship.
- RFC 9369 — QUIC версия 2. Типы пакетов версии 2, начальные ключи, целостность Retry, обновления ключей и согласование версий реализованы вместе с QUIC v1.
- RFC 9438 — CUBIC для быстрых и дальних сетей. Текущий стандарт CUBIC регулирует контроллер перегрузки CUBIC в Webship; BBR и NewReno остаются доступными для выбора, когда рабочая нагрузка требует их использования.
TLS, сертификаты и автоматическое управление сертификатами
- RFC 3339 — Дата и время в Интернете: Метки времени. Окна продления ACME используют совместимые с Интернетом метки времени.
- RFC 4648 — Base16, Base32 и Base64 кодирование данных. Значения ACME JOSE и материалы для рукопожатия WebSocket используют обязательные алфавиты Base64 и Base64url, а также правила заполнения.
- RFC 5280 — Профиль сертификатов и CRL Интернет X.509 PKI. Разбор сертификатов и сгенерированные тестовые сертификаты используют правильные формы DNS и бинарного IP в subjectAltName.
- RFC 5869 — HMAC-основанная функция извлечения и расширения ключа. Вывод ключей HKDF-SHA-256 и HKDF-SHA-384, включая границы вывода, лежит в основе ключей TLS и QUIC.
- RFC 6066 — Расширения TLS. SNI выбирает DNS-идентичности, в то время как буквенные IP-адреса правильно исключены из обычной формы HostName.
- RFC 7301 — Согласование протоколов уровня приложений TLS. ALPN выбирает HTTP/1.1, HTTP/2, HTTP/3 и изолированный протокол проверки ACME на границе TLS.
- RFC 7638 — Отпечаток ключа JSON Web Key. Отпечатки ключей учетной записи ACME получаются в канонической форме JWK.
- RFC 7807 — Сведения о проблемах для HTTP API. Webship использует формат документа проблем, требуемый серверами ACME согласно RFC 8555. Новая спецификация сведений о проблемах заменяет её для новых универсальных API, однако нормативная зависимость ACME остаётся явной.
- RFC 8446 — TLS 1.3. Webship использует TLS 1.3 для публичного TLS, включая тикеты сессии, обновления ключей, оповещения, политику ранних данных и вывод ключей QUIC.
- RFC 8555 — Среда автоматического управления сертификатами. Потоки учетной записи, заказа, авторизации, проверки, завершения, загрузки сертификата и продления автоматизированы с ограниченной обработкой ввода.
- RFC 8737 — Вызов ACME TLS-ALPN-01. Путь TLS только для вызова согласует только acme-tls/1 и предоставляет необходимое критическое расширение сертификата acmeIdentifier.
- RFC 8738 — Расширение ACME для проверки IP-идентификаторов. Webship поддерживает заказы сертификатов для IPv4 и IPv6, бинарные IP SAN и обратный SNI-адрес для проверки IP TLS-ALPN-01.
- RFC 9525 — Идентификация сервиса в TLS. Имена DNS и IP-идентичности сопоставляются в соответствии с текущими правилами идентификации сервиса, без использования подстановочных символов или сокращений общих имен для IP-адресов.
- RFC 9773 — Расширение информации о продлении ACME. Окна продления могут предоставляться УЦ, позволяя Webship безопасно распределять продления, вместо использования одного жесткого локального графика.
WebTransport: точно о том, что стандартизировано
WebTransport через HTTP/3 не считается пятьдесят третьим RFC. По состоянию на Webship 1.3.1 его схема передачи по проводу остается draft-ietf-webtrans-http3-16. Webship реализует этот черновик поверх стандартизированного HTTP/3, расширенного CONNECT, QUIC DATAGRAM, HTTP Datagram и упомянутых выше слоев Capsule. Он также реализует согласованное расширение RESET_STREAM_AT, необходимое для сохранения надежного префикса идентификации сессии при сбросе потока WebTransport.
Это различие имеет значение. Совместимость со стандартами не улучшается, если называть проект RFC. Она улучшается путем явного отслеживания проекта, изоляции его от обычных HTTP-путей, согласования каждого расширения, ограничения каждого ресурса сессии и тестирования поведения при отмене и сбое.
Почему эта широта важна в производстве
Ошибка стандарта редко бывает изолированной. Некорректная обработка HSTS может пересекать границу кэша. Некорректная инструкция QPACK может завершить несвязанные запросы. Небезопасное предположение о ранних данных может повторно выполнить операцию. Ключ кэша QUERY, который пропускает тело запроса, может вернуть результат другого запроса. Прокси, который удаляет трейлеры или некорректно обрабатывает отмену, может незаметно изменить протокол приложения.
Архитектура Webship рассматривает эти аспекты как взаимосвязанные вопросы. Ограничения парсера, проверка безопасности, кэширование, обратное проксирование, состояние транспорта и инструментарий имеют явные соглашения. В результате получается один сервер, который может переключаться между HTTP/1.1, HTTP/2, HTTP/3, статической доставкой, обратным проксированием, потоковой передачей и WebTransport, не задавая каждому режиму отдельного определения корректности.
Проверьте утверждение
Не принимайте превосходную форму на веру. Прочитайте [документацию Webship 1.3.1](/docs/1.3.1), изучите конфигурацию и границы протокола, и воспроизведите опубликованное поведение. Затем [скачайте Webship](/downloads) и протестируйте крайние случаи, которые имеют значение для вашей системы.