Каждый раз, когда браузер загружает страницу, он использует протокол, придуманный одним физиком в швейцарском институте в 1989 году. За 30 лет HTTP изменился до неузнаваемости — и при этом остался совместимым с тем первым запросом из двух букв и слеша.
1989. Физик и потерянные документы
Тим Бернерс-Ли работал в ЦЕРНе и страдал от типичной проблемы большой организации: документы терялись. Уходил человек — и его знания уходили вместе с ним. В 1989 году он написал предложение под названием «Information Management: A Proposal» — по сути, набросок того, что стало вебом. Его научный руководитель поставил резолюцию: «Vague but exciting».
В 1991 году Бернерс-Ли написал первый веб-сервер, первый браузер и первую версию HTTP. Первый в мире HTTP-запрос выглядел так:
GET /
Никакой версии протокола, никаких заголовков, никакого статус-кода в ответе. Сервер просто отдавал HTML и закрывал соединение. Это и был HTTP/0.9.
Как протокол рос вместе с интернетом
HTTP/1.0 (1996) добавил заголовки, статус-коды и методы POST и HEAD. Но у него была фундаментальная проблема: каждый запрос требовал нового TCP-соединения. Загрузка страницы с десятью картинками означала десять рукопожатий TCP.
HTTP/1.1 (1997) исправил это с помощью keep-alive: одно соединение для нескольких запросов. Эта версия продержалась восемнадцать лет — рекорд для интернет-протоколов.
HTTP/2 (2015) пришёл из Google — сначала как внутренний протокол SPDY. Главная идея: мультиплексирование. Несколько запросов параллельно по одному соединению, бинарный формат вместо текстового, сжатие заголовков. Страницы начали загружаться заметно быстрее.
HTTP/3 (2022) сделал следующий шаг — отказался от TCP вообще. Под капотом теперь QUIC: протокол поверх UDP, разработанный Google. Потеря пакета в одном потоке больше не блокирует все остальные. На мобильных сетях, где потери — норма, это ощутимо.
Первый в мире сайт — info.cern.ch — до сих пор работает.
ЦЕРН восстановил его в 2013 году к двадцатилетию веба.
Он отдаётся по HTTP/1.1 и выглядит ровно так, как выглядел в 1991-м:
текст, ссылки, никаких картинок. Загружается за ~50 мс —
быстрее, чем большинство современных сайтов с их мегабайтами JavaScript.