Эволюционная история протокола HTTP: HTTP/1, HTTP/2, HTTP/3.
Эволюционная история протокола HTTP: HTTP/1, HTTP/2, HTTP/3.
Веб-браузеры, серверы и связанные с ними веб-приложения взаимодействуют друг с другом через HTTP.,HTTP — это общий язык, используемый в современном глобальном Интернете. Этот протокол обеспечивает стандартизированный метод связи для различных веб-сервисов.,Позволяет различным системам и устройствам беспрепятственно обмениваться информацией.

Далее разберемся с развитием протокола HTTP.

HTTP/0.9 — однострочный протокол

HTTP/0.9 — самая ранняя версия протокола HTTP, разработанная в 1991 году Консорциумом Всемирной паутины и Инженерной группой Интернета. Эта версия очень проста и в основном используется для академического общения. Она в основном используется для передачи гипертекстового содержимого HTML между сетями, поэтому ее также называют гипертекстовым протоколом.

просить:

Язык кода:javascript
копировать
GET /index.html

ответ:

Язык кода:javascript
копировать
<html>
Welcome to the example.re homepage!
</html>

Особенности HTTP/0.9 включают в себя:

1. Поддерживается только метод GET просить:Запрос состоит из одной строки инструкций,единственным доступным способом GET в начале следует путь к целевому ресурсу (после подключения к серверу протокол, сервер и номер порта не требуются)

2. Нет заголовка запроса и кода состояния.:HTTP/0.9Заголовки запросов и коды состояния не определены,Нет четкого номера версии,Только позже он был определен как 0,9, чтобы отличить его от других версий.

3. Простой текстовый контент:Эта версия поддерживает только текстовый контент.изпередача инфекции,И поддерживает форматирование на языке HTML.,Однако изображения или другие типы контента вставить невозможно.

Это означает, что можно передавать только файлы HTML, файлы других типов передавать нельзя.

4. Не поддерживает постоянные соединения.:HTTP/0.9из Каждая транзакция независимаиз,Каждый запрос должен пройти через установление трехстороннего установления связи TCP.,После обработки запроса,говорить будет выпущено,То есть постоянное соединение не поддерживается.

У такого соглашения есть две проблемы:

(1) Проблемы с производительностью.

Для каждого файла ресурсов (html,изJS, CSS, img и другие ресурсы в html создадут новое изTCPсоединять,Отнимает не только время,Также потребляет системные ресурсы,Особенно, когда имеется большое количество файлов ресурсов.,Этот эффект более очевиден. Открытие TCP для каждого запроса занимает очень много времени. Хотя вы можете открыть несколько соединений одновременно,Отправляйте запросы одновременно,Но количество подключений все-таки ограничено

(2) Проблема с отправкой данных на сервер.

5. Блокированная передача не поддерживается:HTTP/0.9точки не поддерживаютсякусокпередача инфекции,Это механизм, используемый для отправки больших сумм денег небольшими порциями.

6. Ограниченная обработка ошибок:HTTP/0.9из Ограниченные возможности обработки ошибок,Невозможно указать ошибку в ответе. т. е. нет кода состояния или кода ошибки. Однажды что-то пойдет не так,Специальный раздел содержит информацию об описании проблемы в формате HTML. Документ будет отправлен на ремонт.

HTTP/1.0 — создание масштабируемости

Поскольку применение протокола HTTP/0.9 очень ограничено, браузеры и серверы быстро расширили его содержимое, чтобы сделать его более универсальным. Согласно RFC 1945, версия HTTP/1.0 представила несколько важных функций:

1. Поддержка нескольких методов запроса.:HTTP/1.0Поддерживает несколько методов запроса,Включая GET, POST и HEAD.

2. Заголовки:HTTP/1.0Ввел понятие головы.,Это делает связь между клиентом и сервером более сложной и гибкой. Заголовок запроса может содержать такие поля, как Accept,Используется, чтобы сообщить серверу, что он может получать файлы любого типа. Заголовок ответа может содержать поле Content-Type;,Чтобы сообщить браузеру вернуть тип файла. Поля заголовков используются не только для решения различных типов проблем с передачей файлов.,Также могут быть реализованы многие другие функции.,Например, кеш, информация аутентификации и т. д.

3. Код состояния (Состояние Codes):HTTP/1.0Представлены коды состоянияизиспользовать,Позволяет выполнять более сложную обработку ошибок и отчеты о них. Общие коды состояния включают 200 (успех), 404 (не найден) и 500 (внутренняя ошибка сервера).

4. Постоянное соединение (Постоянное Connections):HTTP/1.0Поддержка продолжительнаясоединять,Разрешить отправку нескольких запросов и ответов по одному TCPсоединять,Сокращение затрат на установку и завершение работы.,Это улучшает производительность. Следует отметить, что из,Хотя концепция персистентности была введена в стандарте HTTP/1.0.,но этоВыключено по умолчаниюиз,Необходимо включить в заголовок ответа с помощьюСоединение: Keep-Alive для явного включения

5. Согласование содержания (Содержание Negotiation):HTTP/1.0Введено обсуждение содержанияизконцепция,Позволяет клиентам запрашивать контент в определенных форматах и ​​языках.

6. Улучшен механизм кэширования:HTTP/1.0Внесенные улучшенияизмеханизм кэширования,Делает кэширование ресурсов более эффективным и действенным.

7. HTTP-запрос состоит из трех частей:строка запроса、Заголовок и тело。строка запроса Содержит информацию о запросе ресурсов.изинформация,Например, его URL-адрес. Заголовок содержит дополнительную информацию о запросе или ответе.,Например, тип контента или язык. наконец,Тело содержит изданные, которые необходимо отправить вместе с запросом или ответом.

9、Поддержка версии протокола http:протокол Версияинформациясейчассуществоватьбудет следить за каждыминдивидуальный Запрос на отправку(HTTP/1.0 был добавлен к GET ХОРОШО).

HTTP/1.1 — стандартизированный протокол

Множество различных реализаций HTTP/1.0 на практике могут показаться запутанными. Пересмотр первой стандартизированной версии HTTP начался в 1995 году, через год после выпуска документа HTTP/1.0. В начале 1997 года был выпущен стандарт HTTP 1.1, всего через несколько месяцев после HTTP/1.0.

HTTP/1.1 устранил неоднозначность большого количества контента и внес несколько улучшений:

1. Постоянное соединение по умолчанию:в том жесоединять Несколько запросов и ответов могут быть отправлены на,Нет необходимости заново создавать соединение для каждого запроса. Это значительно улучшает использование сети.,И сократить накладные расходы, вызванные частым установлением соединения.,Сохраняет открытие несколько раз TCP Время, необходимое соединению для загрузки ресурсов веб-документов. HTTP/1.0 по-прежнему обеспечивает долгоесоединять Параметры,То есть добавить его в заголовок запросаConnection: Keep-alive。такой жеиз,В HTTP/1.1,Если вы не хотите использовать опцию длинного подключения,Вы также можете добавить его в заголовок запроса.Connection: close,Это уведомит сервер о завершении соединения.

2. Внедрение механизма конвейера: возможность одновременной отправки нескольких запросов по постоянному соединению.。Это еще больше повышает эффективность связи.,Следует отметить, что из,Сервер должен отправить обратно соответствующие результаты в порядке, запрошенном клиентом, то есть конвейером. Возникла фатальная проблема: руководитель линии Блокировка переводится на китайский язык как «блокировка на первой линии».Именно из-за этого,Чтобы избежать побочных эффектов Pipeline,множество браузеровПо умолчанию конвейер отключен.Понятно

3. Поддержка разделения ответов:HTTP/1.1 представлять ПонятноМеханизм запроса диапазона,Чтобы избежать потери пропускной способности. Когда клиент хочет запросить часть файла,Или вам нужно продолжить загрузку файла, который был частично загружен, но прерван.,HTTP/1.1 можно включить в запросЗаголовок диапазонаотделение,просить(И может запрашивать только тип байтаданные)данныеизчасть。серверную сторону можно игнорировать Отдел связи также может вернуть несколько ответов Range.

Если ответ содержит частичные данные, он будет иметь код состояния 206 (частичное содержимое). Значение этого кода состояния заключается в том, чтобы предотвратить ошибочное рассмотрение ответа прокси-кешем HTTP/1.0 как полный ответ данных и, таким образом, обработку его как кэш ответа для запроса.

в области ответа,Content-Заголовок диапазонаотделениезнак указывает Понятно Долженданныекусокиз Смещение иданныекусокиздлина。

HTTP 1.1изэта характеристикаПрименяется только к загрузкам через точку останова.Чтобы реализовать загрузку точек останова, вам необходимо реализовать это самостоятельно.

4. Внедрить дополнительные механизмы управления кэшем:HTTP/1.1 Механизм кэширования находится в HTTP/1.0 На основе этого значительно повышаются гибкость и масштабируемость. Основной принцип работы и HTTP/1.0 Остается прежним, но добавляется более детальная функциональность.

5. Внедрить механизм согласования контента, включая язык, кодировку, тип и т. д. И позволяет клиенту и серверу договориться об обмене наиболее подходящим контентом.

6. Обработка заголовка хоста:в силу Host заголовок, позволяющий настраивать разные доменные имена в одном IP адрес на сервере.

7. Добавьте большое количество кодов состояния:HTTP/1.0 только определено 16 код состояния. HTTP/1.1 Недавно было добавлено большое количество кодов состояния, включая только код состояния ответа на ошибку. 24 добрый.

HTTP/2 — для лучшей производительности

HTTPэто своего родаПротокол запроса-ответа (ожидание ответа блокирует отправку, предотвращая отправку другого запроса до завершения текущего запроса),лицом к лицуТрубопровод недоступениБраузер ограничивает количество подключений для одного и того же доменного имени (для одного и того же доменного имени браузер может открыть только от 6 до 8 подключений. Однако веб-страница может отправлять десятки HTTP-запросов, но доступно только от 6 до 8 подключений. поэтому вы можете несколько доменных имен нарушить это ограничение.)изслучай,Повышение производительности и параллелизма рендеринга веб-страниц является непростой задачей.

Со временем были разработаны различные технологии, позволяющие преодолеть ограничения производительности HTTP/1.1. Эти технологии разделены на следующие две категории:

(1) Используйте несколько HTTP-соединений.

Открытие нескольких соединений — самый простой способ решить проблемы блокировки HTTP/1.1.,Это позволяет одновременно открывать несколько HTTP-запросов. кроме того,В отличие от трубопроводной технологии,Эта технология не вызывает блокировки HOL.,Потому что каждая HTTPсоединять независима от другой HTTPсоединять. поэтому,Большинство браузеров могут открываться для каждого доменного имени.6индивидуальныйсоединять。Чтобы еще больше нарушить ограничение на 6 подключений, можно использовать несколько доменных имен.,Каждое доменное имя отвечает за часть соединения.

Использование нескольких HTTP-соединений звучит здорово, но у него есть и недостатки. При открытии нескольких HTTP-соединений возникают дополнительные издержки как для клиента, так и для сервера: для открытия TCP-соединений требуется время, а для поддержания соединений требуется больше памяти и ресурсов ЦП.

(2) Объедините HTTP-запросы.

С этой целью в начале 2010 года Google реализовала экспериментальный протокол SPDY. Эта альтернатива обмена данными на стороне клиента и сервера вызвала интерес разработчиков, работающих как над браузерами, так и над серверами. Разъясняя растущее количество ответов и решая сложные задачи передачи данных, SPDY стал основой протокола HTTP/2.

Новая версия протокола сильно отличается от исходного протокола следующими новыми функциями:

1. Двоичная передача: замените текстовый формат двоичным форматом.

Одно из основных различий между HTTP/1 и HTTP/2 заключается в том, что HTTP/2 — это двоичный пакетный протокол, а HTTP/1 — полностью текстовый. Используя текстовый протокол, запрос должен быть отправлен и получен ответ, прежде чем можно будет запустить следующий запрос. HTTP/2 становится полностью двоичным протоколом, и сообщения HTTP отправляются в четко определенных кадрах данных. Все сообщения HTTP/2 используют фрагментированное кодирование. Это стандартное поведение, которое не нужно задавать явно. Кадры здесь аналогичны TCP-пакетам, поддерживающим HTTP-соединения. Когда все кадры данных получены, их можно объединить в полное HTTP-сообщение.

2. Мультиплексирование вместо синхронных запросов

HTTP/1 — это синхронный эксклюзивный протокол запроса-ответа. Клиент отправляет сообщение HTTP/1, а сервер возвращает ответ HTTP/1.

HTTP/2 позволяет одновременно выполнять несколько запросов по одному соединению, используя разные потоки для каждого HTTP-запроса или ответа.проходитьиспользовать Двоичный каркасный слой,Присвойте каждому кадру идентификатор потока,Для поддержки нескольких независимых запросов одновременно. Когда все кадры этого потока получены,Получатель может собрать кадры в полное сообщение.。Фреймы — ключ к одновременной отправке нескольких сообщений。Каждыйиндивидуальный Кадры помечены, чтобы указать, где они находятся.индивидуальныйинформация(поток),Таким образом, на одном соединении одновременно может быть два, три или даже сотни сообщений. В отличие от HTTP/1,Большинство браузеров могут выполнять только 6 одновременных запросов.

для ПонятноПредотвращение конфликтов идентификаторов потоков,Клиент инициировализпроситьиспользоватьНечетный идентификатор потока,серверинициироватьизпроситьиспользоватьДаже идентификатор потока

3. Приоритет потока и управление потоком

4. Сжатие заголовка

5. Нажатие на сервер

6. Совместимость с HTTP/1.1.

Хотя HTTP/2 принес много улучшений в производительности.,Но у него есть и некоторые недостатки 1. Снижение производительности в сценариях потери пакетов:HTTP/2использовать Мультиплексирование,Обычно для одного и того же требуется только одно доменное имя.индивидуальныйTCPсоединять。Но когда этоиндивидуальныйсоединятьсерединаЕсли произойдет потеря пакета, все TCP-соединение начнет ожидать повторной передачи, что повлияет на всю последующую передачу данных, делая производительность HTTP/2 хуже, чем HTTP/1.2. Повышенные требования к конфигурации сервера:для Понятно В полной мере использоватьHTTP/2из Преимущества производительности,сервер необходимо настроить и оптимизировать соответствующим образом.,Это может увеличить сложность и затраты на обслуживание.

HTTP/3 — HTTP через QUIC

HTTP/3 (протокол передачи гипертекста версии 3) — третья версия протокола HTTP, разработанная для решения проблем, существующих в HTTP/2, и дальнейшего повышения производительности передачи по сети. Основная особенность HTTP/3 заключается в том, что он использует протокол QUIC вместо традиционного протокола TCP. QUIC (Быстрый UDP Internet Connections)это своего родана основеUDP(пользовательданныегазетапротокол)изпередача инфекциипротокол

Основные преимущества HTTP/3 заключаются в следующем:

  1. Уменьшите задержку соединения:потому чтоQUICоснован наUDPиз,Таким образом, нет необходимости выполнять трехстороннее TCP-подтверждение при установлении соединения.,Тем самым уменьшая задержку соединения.
  2. Улучшение контроля перегрузок:QUICиспользовать Понятнонезависимыйизалгоритм контроля перегрузок,Скорость передачи может динамически регулироваться в зависимости от условий сети.,Избегайте перегрузок и потери данных.
  3. Устраните блокировку начала строки:существоватьHTTP/2середина,Мультиплексирование может вызвать проблемы с блокировкой начала строки.,То есть задержка одного запроса влияет на обработку других запросов. QUIC работает путем инкапсуляции каждого запроса в отдельный поток.,Эта проблема устранена.
  4. Прямая коррекция ошибок (FEC)):QUICПоддержка технологии прямого исправления ошибок,Может обнаруживать и исправлять ошибки в процессе передачи данных.,Повышение надежности передачи данных.
  5. Лучше из безопасности:QUICвстроенный ПонятноTLS Шифрование 1.3 обеспечивает более высокий уровень безопасности, чем HTTP/2.

Версия: 1. https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP.

2、HTTP/2 in Action

3、https://robotecture.com/the-evolution-of-http-how-the-internet-became-what-it-is-today/

4、https://http.dev/1.1

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода