8. Мир http2

Как всё будет выглядеть, когда http2 будет принят? Будет ли он принят?

8.1. Как http2 повлияет на обычных людей?

http2 ещё широко не представлен и не используется. Мы не можем сказать точно как всё сложится. Мы видели как использовался SPDY и мы можем сделать некоторые предположения и вычисления, основанные на этом и на других прошлых и текущих экспериментах.

http2 уменьшает количество необходимых сетевых приёмов-передач, полностью избегает дилеммы блокировки начала очереди за счёт мультиплексирования и быстрого отклонения нежелательных потоков.

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

С приоритетами, корректно используемыми на потоках, шансы получить важные данные раньше менее важных значительно выше.

Собрав всё это вместе, я скажу, что очень высоки шансы, что это приведёт к ускорению загрузки страниц и повысит отзывчивость веб-сайтов. Коротко: лучше ощущения от веб-серфинга.

Насколько быстрее и насколько лучше мы увидим. Я не думаю, что мы пока готовы сказать. Во-первых технология по-прежнему ещё молода, а во-вторых, мы ещё не видели аккуратных реализаций клиентов и серверов, которые по-настоящему используют всю мощь, которую предоставляет новый протокол.

8.2. Как http2 повлияет на веб-разработку?

Годами веб-разработчики и среды веб-разработки собирали полный набор приёмов и утилит для обхода проблем HTTP 1.1, некоторые из которых отмечены в начале этого документа, как причины разработки http2.

Большинство этих обходных путей, которые инструменты и разработчики теперь используют не задумываясь по умолчанию, вероятно ударят по производительности http2 или, по крайне мере, не воспользуются всеми преимуществами новой супер-силы http2. Спрайты и встраивание не должны использоваться совместно с http2. Шардинг вероятно будет вреден для http2, так как http2 выигрывает от использования меньшего числа соединений.

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

Только по этой причине, я подозреваю, пройдёт какое-то время, прежде чем мы увидим полное раскрытие потенциала http2.

8.3. http2 реализации

Конечно пытаться задокументировать специфические реализации в подобном этому документах – полностью бесполезный труд, который обречён на провал и устареет за весьма короткий период времени. Вместо этого я объясню ситуацию в широком смысле и направлю читателей к списку реализаций на веб-сайте http2.

Уже сейчас существует большое количество реализаций и их число растёт день ото дня по мере работы над http2. В то же время, на момент написания, существует больше 40 реализаций и многие из них реализуют финальную версию спецификации.

Firefox всегда был браузером в авангарде самых новейших версий черновика, Twitter продолжает предоставлять сервисы по http2. Google в апреле 2014 запустил поддержку http2 на неcкольких тестовых серверах своих сервисов, а начиная с мая 2014 они поддерживают http2 в разрабатываемой версии браузера Chrome. Microsoft представил технический пререлиз следующей версии Internet Explorer с поддержкой http2. Safari и Opera заявили, что будут поддерживать http2.

curl и libcurl поддерживают как незащищённый http2, так и поверх TLS, используя одну из нескольких TLS-библиотек.

H2O, Apache Traffic Server и nghttp2 выпустили сервера с открытым исходным кодом с поддержкой http2.

8.3.1. Отсутствующие реализации

Два наиболее популярных сервера Apache HTTPD и Nginx, поддерживающих SPDY, но до сих пор не представивших официльного релиза с поддержкой http2. Nginx выпустил «альфа патч», HTTP/2 модуль для Apache, названный mod_h2, также на пути к публичному релизу «уже скоро».

8.4. Типичная критика http2

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

8.4.1. “Протокол спроектирован и сделан в Google”

Есть также вариации подразумевающие, что мир ещё больше зависит и контролируется Google. Это не правда. Протокол разработан внутри IETF тем же самым способом, как протоколы разрабатывались за последние 30 лет. Однако, все мы признательны Google за бесподобную работу над SPDY, который не только доказал, что возможно внедрять новый протокол таким способом, но и помог получить оценки того, что мы можем получить.

Google публично проанонсировали, что они удалят поддержку SPDY и NPN в Chrome в 2016 году и они призывают мигрировать сервера на HTTP/2.

8.4.2. “Протокол полезен только для браузеров”

В какой-то мере это так. Одна из главных причин, кроющейся за разработкой http2 – это исправление конвейерной обработки HTTP. Если в вашем случае не требовалась конвейерная обработка, то http2 не будет вам особо полезен. Это конечно не единственное достижение протокола, но самое значительное.

Как только сервисы начнут понимать всю мощь и возможности мультиплексированных потоков в одном соединении, я ожидаю, что мы увидим увеличение числа приложений, использующих http2.

Небольшие REST API и простые программные применения HTTP 1.x не получат больших преимуществ от перехода на http2. Но, тем не менее, будет совсем немного минусов для большинства пользователей.

8.4.3. “Протокол полезен только для больших сервисов”

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

8.4.4. “Использование TLS делает его медленным”

В некоторой степени это верно. Согласование TLS даёт небольшие накладные расходы, но уже прилагаются усилия для ещё большего уменьшения числа запросов-ответов для TLS. Расходы на выполнение TLS-шифрования, по сравнению с передачей открытым текстом, не так незначительны и явно заметны, поэтому больше процессорного времени и электричества будет потрачено на том же самом трафике, как в небезопасном протоколе. Сколько и какие последствия это будет иметь – тема для высказываний и измерений. Смотрите, например, istlsfastyet.com как один из источников по теме.

Телекомы и другие сетевые операторы, например ATIS Open Web Alliance, утверждают, что им нужен нешифрованный трафик, чтобы осуществлять кэширование, сжатие и другие технологии, требуемые для быстрой работы через спутники, в самолётах и подобных системах.

http2 не обязывает использовать TLS, поэтому мы не должны смешивать термины.

Множество пользователей в Интернете выразили желание, чтобы TLS использовался более широко, и мы должны помогать защитить неприкосновенность частной жизни пользователей.

Эксперименты показали, что использование TLS повышает шансы на успех, по сравнению с реализацией протоколов с открытым текстом на 80-м порту, так как слишком много промежуточных узлов в мире, которые взаимодействуют с этим трафиком, воспринимая его как HTTP 1.1 если он идёт по 80-у порту и временами похож на HTTP.

Наконец, благодаря мультиплексированным потокам http2 по одному соединению, в привычной практике браузеров будет выполняться значительно меньше согласований и они будут работать быстрее, чем с HTTPS при использовании HTTP 1.1.

8.4.5. “Не ASCII-протокол всё портит”

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

Если вы действительно не можете принять бинарный протокол, тогда вы также не сможете принять и TLS, и сжатие в HTTP 1.x, которые существуют уже довольно длительное время.

8.4.6. “Он не быстрее, чем HTTP/1.1”

Это спорный вопрос для дебатов и дискуссий о том, что значит быстрее и как это измерить, но уже сейчас, во времена SPDY, множество проведённых тестов доказали увеличившуюся скорость загрузки страниц (например «Насколько быстр SPDY?» людьми из универститета Вашингтона и «Оценка производительности веб-серверов с поддержкой SPDY» Херва Серви) и подобные эксперименты был повторены также и для http2. Ждём дальнейших публикаций подобных тестов и экспериментов. Первый базовый тест, проведёный в httpwatch.com, обнадёживает, что HTTP/2 сдерживает свои обещания.

8.4.7. “Он содержит нарушения независимости слоёв”

Серьёзно, это является аргументом? Слои не являются неприкосновенными религиозными столпами и мы пересекли черты в нескольких серых областях при создании http2 в интересах создания хорошего и эффективного протокола в заданных условиях.

8.4.8. “Не исправлены некоторые дефекты HTTP/1.1”

Это правда. Из-за специфической цели поддержки HTTP/1.1 есть несколько старых HTTP особенностей, которые остались на месте. Такие как заголовки, включая ужасные Cookie, заголовки авторизации и другие. Но ценой поддержки такой парадигмы мы получаем протокол, который возможно внедрять без невероятного объёма работ, который бы потребовал переписывания фундаментальных частей. Http2, на самом деле, просто новый слой фреймов.

8.5. Станет ли http2 широко распространён?

Ещё довольно рано говорить наверняка, но я могу предположить и оценить, и это я и собираюсь сделать здесь.

Скептики скажут «смотрите как хорошо был сделан IPv6», как пример нового протокола, который потребовал десятки лет просто, чтобы хотя бы начать широко применяться. http2 – это вовсе не IPv6. Это протокол, работающий поверх TCP, использующий обычный HTTP механизм обновления, номер порта, TLS и т. д. Он вообще не потребует замены большинства маршрутизаторов и брендмауеров.

Google доказал миру с помощью своей работы над SPDY, что такой новый протокол может быть внедрён и использован браузерами и сервисами с несколькими реализациями за довольно небольшой период времени. Несмотря на то, что количество серверов в Интернете, которые сегодня предлагают SPDY в районе 1%, но количество данных, с которыми они работают значительно больше. Некоторые из наиболее популярных веб-сайтов сегодня предлагают SPDY.

http2, основанный на тех же базовых парадигмах, что и SPDY, я уверен, вероятно будет внедрён ещё активнее, так как это официальный протокол IETF. Внедрение SPDY всегда сдерживалось клеймом «это протокол Google».

За выпуском стоят несколько известных браузеров. Представители Firefox, Chrome, Safari, Internet Explorer и Opera выразили готовность выпускать браузер с поддержкой http2 и показали рабочие реализации.

Существуют и несколько серверных провайдеров, которые вероятно вскоре предложат http2, включая Google, Twitter и Facebook, и мы надеемся вскоре увидеть поддержку http2 добавленную в популярные реализации веб-серверов, таких как Apache HTTP Server и nginx. H2o – это новый неверятно быстрый HTTP-сервер с поддержкой http2 демонстрирует явный потенциал.

Некоторые крупные вендоры прокси-серверов, включая HAProxy, Squid и Varnish выразили намерение поддерживать http2.

В течении 2015 года количество http2 трафика росло. В начале сентября в Firefox 40 оно составляло 13% всего HTTP-трафика и 27% от всего HTTPS-трафика, в то время как Google видел примерно 18% входящего HTTP/2. Надо упомянуть, что Google также проводит эксперимент с новым протоколом (смотрите QUIC в главе 12.1), что снижает показатели использования http2 от тех значений, которые в противном случае могли быть.