Я работаю в университете над 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:
Однако для большинства из них есть исправления.
Эти 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 он применяется), но это моя типичная несбыточная мечта.