Краткая история HTTP

HTTP Программа перевода самородков

Введение

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

В этой главе мы кратко опишем эволюцию протокола HTTP. Полное обсуждение различной семантики HTTP выходит за рамки этой книги, но понимание ключевых изменений дизайна HTTP и мотивации каждого изменения даст нам необходимую основу для обсуждения производительности HTTP, особенно HTTP/2, как описано в этой книге. статья Грядет много улучшений.

HTTP 0.9: однопроводной протокол

Первоначальное HTTP-предложение Тима Бернерса-Ли было разработано спростота, чтобы помочь ему поддержать еще одну из его зарождающихся идей: Всемирную паутину. Стратегия, кажется, работает: начинающие разработчики протоколов, обратите внимание

В 1991 году Бернерс-Ли обрисовал мотивацию нового протокола и перечислил несколько целей разработки высокого уровня: возможности передачи файлов, возможность запрашивать индексированный поиск в гипертекстовых архивах, согласование формата и возможность направлять клиентов на другой сервер. Чтобы продемонстрировать практическое применение теории, он построил простой прототип, реализующий небольшое подмножество предложенной функциональности:

  • Запрос клиента представляет собой одну строку ASCII.
  • Запросы клиента завершаются возвратом каретки (CRLF).
  • Ответ сервера представляет собой поток символов ASCII.
  • Ответ сервера представляет собой язык гипертекстовой разметки (HTML).
  • Завершите соединение после завершения передачи документа.

На самом деле это не так уж сложно, эти правила позволяют использовать очень простой и дружественный к Telnet протокол, который некоторые веб-серверы все еще поддерживают сегодня:

$> telnet google.com 80

Connected to 74.125.xxx.xxx

GET /about/

(hypertext response)
(connection closed)

Запрос состоит из одной строки:GETСоставляется метод метода и путь к запрашиваемому документу. Ответ представляет собой единый гипертекстовый документ — в нем нет ни заголовка, ни каких-либо других метаданных, только HTML, он действительно не может быть простым. Кроме того, из-за предыдущего взаимодействия это подмножество ожидаемого протокола, его также называют HTTP/0.9 в частном порядке. Остальное, как говорится, уже история.

Из этих скромных начинаний в 1991 году HTTP сработала свою собственную жизнь и быстро выросла в течение следующих нескольких лет. Давайте быстро рассмотрим функции http / 0,9:

  • Клиент-сервер, протокол запрос-ответ.
  • Протокол ASCII, работающий по каналу TCP/IP.
  • Предназначен для передачи гипертекстовых документов (HTML).
  • После каждого запроса соединение между сервером и клиентом закрывается.

Совет: На данном этапе популярные веб-серверы, такие как Apache и Nginx, все еще частично поддерживают протокол HTTP/0.9, потому что это действительно просто! Если вам интересно, откройте сеанс Telnet и попробуйте получить доступ через HTTP/0.9.google.comИли ваши собственные любимые веб-сайты и проверьте поведение и ограничения раннего согласия.

HTTP/1.0: быстрое развитие протокола и информации RFC

Период с 1991 по 1995 год был периодом быстрого развития спецификации HTML, рождения браузеров, а также появления и быстрого роста общедоступной потребительской интернет-инфраструктуры.

Идеальный шторм: Интернет-бум начала 1990-х

Основываясь на оригинальном прототипе браузера Тима Бернера-Ли, команда Национального центра суперкомпьютерных приложений (NCSA) решила реализовать свою собственную версию. Это ознаменовало рождение первого популярного браузера: NCSA Mosaic. В октябре 1994 года Марк Андриссен, программист из команды NCSA, объединился с Джимом Кларком для создания Mosaic Communications. Позже компания сменила название на Netscape и выпустила Netscape Navigator 1.0 в декабре 1994 года. С тех пор стало ясно, что Всемирная паутина — это не просто горячая точка академических кругов, она обязательно вызоветболееобрати внимание на.

Фактически, первая конференция World Wide Web была проведена в Женеве, Швейцария, чтобы помочь в разработке HTML (W3C). В тот же период в IETF была создана рабочая группа по HTTP (HTTP-WG), занимающаяся улучшением протокола HTTP. До сегодняшнего дня они по-прежнему являются важной командой Интернета и продолжают способствовать развитию Интернета.

Наконец, для того, чтобы создать идеальный шторм, Compuserve, AOL и Prodigy 1994 - Start предоставляет доступ к Интернету для общественности в 1995 году. С этой волной интернет-акций, Netscape в 9 августа 1995 года в очень успешной истории IPO - интернет-бум пришел, все хотят поделиться ложкой супа!

Растущее количество случаев использования на общественных веб-сайтах показало растущий спрос на функциональность от появляющейся сети, которые быстро подвергали многих фундаментальных ограничениях HTTP / 0,9: нам нужны протоколы, которые могут не только служить гипертекстовыми документами, но и более богатые метаданные о запросах. и ответы, позволяющие переговоры о контенте и многое другое. Сообщество зарождающегося веб-разработчика ответило, создавая кучу экспериментальных HTTP-серверов и клиентов посредством выделенного процесса «внедрения его, развертываю его и посмотреть, начинает ли кто-то принять его».

После этого бурного экспериментального периода начал появляться ряд лучших практик и общих шаблонов, и в мае 1996 года Рабочая группа HTTP (HTTP-WG) опубликовала RFC 1945, в котором задокументировано множество нестандартных, но «распространенных» HTTP/1.0. "метод реализации. Обратите внимание, что это просто информационный RFC: HTTP/1.0, поскольку мы знаем, что это не официальная спецификация или интернет-стандарт!

Сказав это, экземпляр запроса HTTP/1.0 выглядит очень знакомо:

$> telnet website.org 80

Connected to xxx.xxx.xxx.xxx

GET /rfc/rfc1945.txt HTTP/1.0 1⃣️
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Accept: */*

HTTP/1.0 200 OK 2⃣️
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 01 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 1 May 1996 12:45:26 GMT
Server: Apache 0.84

(plain-text response)
(connection closed)

1⃣️ Строка запроса с номером версии HTTP, за которым следует заголовок запроса

2⃣️Имеет код статуса ответа, за которым следует заголовок ответа

Предыдущие изменения, хотя и не являются исчерпывающим списком функций HTTP/1.0, иллюстрируют некоторые ключевые изменения протокола:

  • Запрос может содержать несколько полей заголовка, разделенных новой строкой.
  • Объект ответа имеет префикс поведения состояния ответа.
  • Объект ответа имеет собственный набор полей заголовка, разделенных новой строкой.
  • Объекты ответа не ограничиваются гипертекстом.
  • После каждого запроса соединение между сервером и клиентом закрывается.

Заголовки запроса и ответа должны быть гарантированно закодированы в ASCII, но сам объект ответа может быть любого типа: HTML-файл, обычный текстовый файл, изображение или любой другой тип содержимого. В результате часть HTTP «Передача гипертекста» стала менее подходящей вскоре после появления новой функции. На самом деле, HTTP быстро превратился вгипермедиапередается, но исходное имя остается.

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

Совет: сегодня почти каждый сервер в сети может и будет использовать HTTP/1.0. Кроме того, к настоящему времени вы должны знать об этом больше! Требование нового TCP-соединения для каждого запроса приведет к серьезному снижению производительности для HTTP/1.0. Ссылаться на:трехстороннее рукопожатие,а такжемедленный старт.

HTTP/1.1: интернет-стандарт

Работа по превращению HTTP в официальный интернет-стандарт IETF шла параллельно с документацией по HTTP/1.0 и длилась около четырех лет: с 1995 по 1999 год. Фактически, первый формальный стандарт HTTP/1.1 был определен в RFC 2068, который был официально выпущен в январе 1997 года, примерно через шесть месяцев после публикации HTTP/1.0. Два с половиной года спустя, в июне 1999 года, многие улучшения и обновления были включены в стандарт и опубликованы как RFC 2616.

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

Благодаря этим возможностям мы теперь можем проверять типичный сеанс HTTP/1.1, выполняемый любым современным HTTP-браузером и клиентом:

$> telnet website.org 80
Connected to xxx.xxx.xxx.xxx

GET /index.html HTTP/1.1 1⃣️

Host: website.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4)... (snip)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __qca=P0-800083390... (snip)

HTTP/1.1 200 OK 2⃣️

Server: nginx/1.0.11
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Via: HTTP/1.1 GWA
Date: Wed, 25 Jul 2012 20:23:35 GMT
Expires: Wed, 25 Jul 2012 20:23:35 GMT
Cache-Control: max-age=0, no-cache
Transfer-Encoding: chunked

100 3⃣️

<!doctype html>
(snip)

100
(snip)

0 4⃣️

GET /favicon.ico HTTP/1.1 5⃣️

Host: www.website.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4)... (snip)
Accept: */*
Referer: http://website.org/
Connection: close 6⃣️

Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __qca=P0-800083390... (snip)

HTTP/1.1 200 OK 7⃣️

Server: nginx/1.0.11
Content-Type: image/x-icon
Content-Length: 3638
Connection: close
Last-Modified: Thu, 19 Jul 2012 17:51:44 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes
Via: HTTP/1.1 GWA
Date: Sat, 21 Jul 2012 21:35:22 GMT
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Etag: W/PSA-GAu26oXbDi

(icon data)
(connection closed)

1⃣️ Запросить HTML-файл с кодировкой, набором символов и метаданными cookie.

2⃣️ Фрагментированный ответ на необработанный HTML-запрос

3⃣️ Количество октетов в блоке представлено в виде шестнадцатеричного числа ASCII (256 байт)

4⃣️ Ответ на блокировку потока заканчивается

5⃣️ Запросите файл значка, созданный на том же TCP-соединении.

6⃣️ Сообщите серверу, что соединение не будет использоваться повторно

7⃣️ Значок отвечает, затем закрывает соединение

Черт возьми, там так много всего происходит! Первое и наиболее очевидное отличие заключается в том, что у нас есть два запроса объекта, один для HTML-страницы и один для изображения, оба передаются по одному соединению. Это практическое применение поддержки активности соединения, которое позволяет нам повторно использовать существующее TCP-соединение для выполнения нескольких запросов к одному и тому же хосту и обеспечения более быстрого взаимодействия с конечным пользователем. видетьОптимизация TCP.

Чтобы разорвать постоянное соединение, обратите внимание на второй запрос клиентаcloseпройти черезConnectionЗаголовок запроса отправляет серверу явные инструкции. Точно так же после передачи ответа сервер может сообщить клиенту о своем намерении закрыть текущее TCP-соединение. Технически любая сторона может разорвать TCP-соединение без такого сигнала, но клиенты и серверы должны предоставлять его всякий раз, когда это возможно, для достижения лучшей стратегии повторного использования соединения с обеих сторон.

Совет: Измените синтаксис протокола HTTP, чтобы по умолчанию использовать поддержку активности соединения в HTTP/1.1. Это означает, что, если не указано иное (черезConnection: closeзаголовок), в противном случае сервер должен держать соединение открытым по умолчанию.

Однако та же функциональность была также перенесена в HTTP/1.0 и черезConnection: Keep-AliveЗаголовки включены. Поэтому, если вы используете HTTP/1.1, технически вам не нужноConnection: Keep-Aliveзаголовок запроса, но многие клиенты по-прежнему предпочитают его предоставлять.

Кроме того, протокол HTTP/1.1 добавляет контент, кодировку, набор символов и даже согласование языка, кодирование передачи, инструкции кэширования, клиентские файлы cookie и более дюжины функций, которые можно согласовывать по каждому запросу.

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

СОВЕТ. Для получения подробной информации обо всей внутренней работе протокола HTTP ознакомьтесь с O'Reilly Дэвида Гурли и Брайана Тотти.HTTP: полное руководство.

HTTP/2: повышение производительности транспорта

С момента публикации RFC 2616 стал основой для беспрецедентного роста Интернета: миллиарды устройств всех форм и размеров, от настольных компьютеров до небольших сетевых устройств в наших карманах, и повседневные гаджеты, на которые мы все полагаемся в своей жизни. Используйте HTTP для доставки новостей, видео и миллионов других веб-приложений.

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

Нужен договор на управление кофейником? RFC 2324 охватывает гипертекстовые протоколы управления кофе (HTCPCP/1.0) — оригинальная первоапрельская шутка IETF, но постепенно в нашем новом мире суперсоединений это уже не «шутка».

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

RFC 2616: HTTP/1.1, июнь 1999 г.

Простота протокола HTTP обеспечила его первоначальное широкое распространение и быстрый рост. Фактически, в настоящее время нередко можно найти встроенные устройства (датчики, приводы и кофеварки), использующие HTTP в качестве основного протокола управления и передачи данных. Но под тяжестью собственного успеха и по мере того, как мы продолжаем все больше переводить наши повседневные взаимодействия в онлайн — социальные сети, электронную почту, новости, видео и, все чаще, личные и рабочие пространства — он также начал проявлять признаки слабости. И пользователи, и веб-разработчики теперь требуют от HTTP/1.1 быстродействия и производительности протокола почти в реальном времени, и он не может удовлетворить эти требования без модификации.

Чтобы справиться с этими новыми проблемами, HTTP должен продолжать развиваться, поэтому в начале 2012 года рабочая группа HTTPbis объявила о новой инициативе для HTTP/2:

Новая реализация фокусируется на сохранении семантики HTTP и отказе от устаревших проблем фрейма сообщения HTTP/1.x и синтаксиса, которые, как было установлено, снижают производительность и делают его очень уязвимым для неправильного использования базового транспорта.

Рабочая группа разработает новую спецификацию на основе текущей семантики HTTP и заказанного полнодуплексного режима. Как и в случае с http / 1.x, основной транспортный транспорт - это TCP, но другие транспортировки должны быть доступны.

Хартия HTTP/2, январь 2012 г.

Основное внимание в HTTP/2 уделяется повышению производительности передачи и достижению более низкой задержки и более высокой пропускной способности. Увеличение основной версии звучит как большой шаг, и с точки зрения производительности это будет большой шаг, но важно отметить, что это не влияет на семантику протокола высокого уровня: все заголовки, значения и пользовательские сценарии HTTP одинаковы. .

Любой существующий веб-сайт или приложение может и будет доставляться через HTTP/2 без каких-либо изменений: вам не нужно изменять свое приложение, чтобы воспользоваться преимуществами HTTP/2. HTTP-серверы обычно используют HTTP/2, но для большинства пользователей это должно быть прозрачным обновлением. Если рабочая группа достигает своих целей, единственная разница должна заключаться в том, что наше приложение доставляется с меньшей задержкой и лучшим использованием сетевого канала!

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

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.

Категории