Назад | Перейти на главную страницу

RFC 7231 - последняя версия протокола HTTP / 1.1?

Я работаю в университете над HTTP и пытаюсь объяснить, что происходит, когда между клиентом и сервером существует HTTP-соединение. Для этого я использую команду «curl -v -i» в терминале Ubuntu, которая показывает заголовки HTTP-соединения. В этом случае подключение к серверу осуществляется с версией HTTP / 1.1.

Я хочу использовать самые свежие источники. В первую очередь я ссылался на документ RFC2616, но в этом блоге (https://www.mnot.net/blog/2014/06/07/rfc2616_is_dead) там сказано, что самый современный документ - RFC 7231. Мои вопросы: это правда? Все ли соединения HTTP / 1.1 используют спецификации RFC 7231? Возможно ли, что RFC 7231 уже был заменен на более современный?

Большое спасибо.

HTTP / 1.1 официально описан в 6 RFC:

  1. RFC 7230, HTTP / 1.1: маршрутизация синтаксиса сообщений
  2. RFC 7231, HTTP / 1.1: семантика и содержание
  3. RFC 7232, HTTP / 1.1: условные запросы
  4. RFC 7233, HTTP / 1.1: запрос диапазона
  5. RFC 7234, HTTP / 1.1: кеширование
  6. RFC 7235, HTTP / 1.1: аутентификация

Однако для большинства из них есть исправления.

Эти RFC также в настоящее время пересматриваются снова. посредством Рабочая группа HTTP из IETF и ожидается, что они «скоро» будут формализованы как RFC, что предположительно «устареет» 6.

И, конечно, есть HTTP / 2 RFC но проигнорируем это, поскольку вы конкретно говорите о HTTP / 1.1, а HTTP / 1.1 и HTTP / 2 в значительной степени имеют одинаковую семантику. На этой записке HTTP / 3 также должен быть опубликован «в ближайшее время».

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

И, как указано в другом ответе, многие серверы не соответствуют спецификации именно из-за ошибок или даже потому, что разработчик специально решил не делать этого. HTTP - это богатый, большой и сложный протокол, и Интернет всегда был довольно снисходительным по сравнению с некоторыми областями вычислений, где отсутствующая или неправильная точка с запятой может остановить всю программу. Есть даже хорошо известная максима под названием Закон Постела, гласящая, что «будь консервативным в том, что ты делаешь, будь либеральным в том, что ты принимаешь от других». так много реализаций принимают сообщения, что строгое чтение спецификации не позволит. Хотя по этому поводу следует отметить, что у IETF есть еще один проект RFC утверждая, что закон Постела (он же «Принцип устойчивости») вреден.

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

В то время как RFC 7231 не показывает таких Updated by:

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

Я бы рекомендовал либо строго придерживаться RFC и делать все это в блок-схемах / диаграммах / UML, псевдокоде и т. Д., Либо определять, как это фактически реализовано на некоторых из наиболее популярных серверов и клиентов. Поскольку они имеют открытый исходный код, исходный код является окончательным ответом на ваш вопрос.

Надеюсь, в источнике хорошо прокомментировано не только то, что делается, но и то, почему это делается (то есть, к какой части RFC он применяется), но это моя типичная несбыточная мечта.