HTTP/2 (изначально HTTP/2.0) — вторая крупная версия сетевого протокола HTTP, используемая для доступа к World Wide Web. Протокол основан на SPDY[1]. HTTP/2[2] был разработан рабочей группой Hypertext Transfer Protocol working group (httpbis, где bis означает «ещё раз», «повторно», «на бис») из Инженерного совета Интернета[3].

HTTP/2
Разработчик Инженерный совет Интернета
Логотип Викисклада Медиафайлы на Викискладе

HTTP/2 является первой новой версией HTTP с версии HTTP 1.1, которая была стандартизирована RFC 2616 в 1999. Рабочая группа представила протокол HTTP/2 на рассмотрение IESG как Proposed Standard в декабре 2014[4][5] и IESG утвердила его к публикации как Proposed Standard 17 февраля 2015 года[6][7]. Спецификация HTTP/2 была опубликована как RFC 7540 в мае 2015 года[8].

Усилия по стандартизации являются ответом на разработку SPDY (HTTP-совместимый протокол, разработанный Google[9] и поддерживаемый браузерами Chrome, Opera, Firefox, Internet Explorer 11, Safari и Amazon Silk)[10].

9 февраля 2015 года Google объявила о планах прекратить поддержку SPDY в Chrome в начале 2016 года в пользу HTTP/2 (Chrome 40+)[11].

По данным W3Techs на 1 февраля 2021 года, 50,2 % из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/2[12].

  • Добавить механизмы согласования протокола, клиент и сервер могут использовать HTTP 1.1, 2.0 или, гипотетически, иные, не HTTP-протоколы.
  • Поддержать совместимость с многими концепциями HTTP 1.1, например по набору методов доступа (GET, PUT, POST и т. п.), статусным кодам, формату URI, большому количеству заголовков
  • Уменьшение задержек доступа для ускорения загрузки страниц, в частности путём:
    • Сжатия данных в заголовках HTTP
    • Использования push-технологий на серверной стороне
    • Конвейеризации запросов
    • Устранения проблемы блокировки «head-of-line» протоколов HTTP 1.0/1.1
    • Мультиплексирования множества запросов в одном соединении TCP
  • Сохранение совместимости с широко внедрёнными применениями HTTP, в том числе с веб-браузерами (полноценными и мобильными), API, используемыми в Интернете, веб-серверами, прокси-серверами, обратными прокси-серверами, сетями доставки контента

Отличия от HTTP/1.1

править

Протокол HTTP/2 является бинарным[13][14]. По сравнению с предыдущим стандартом изменены способы разбиения данных на фрагменты и транспортирования их между сервером и клиентом.

В HTTP/2 сервер имеет право послать то содержимое, которое ещё не было запрошено клиентом. Это позволит серверу сразу выслать дополнительные файлы, которые потребуются браузеру для отображения страниц, без необходимости анализа браузером основной страницы и запрашивания необходимых дополнений.

Также часть улучшений получена (в первом черновике HTTP/2, который представлял собой копию спецификации SPDY) за счёт мультиплексирования запросов и ответов (для преодоления проблемы «head-of-line blocking» протоколов HTTP/1.x), а также за счёт сжатия передаваемых заголовков и введения явной приоритизации запросов.

Шифрование

править

HTTP/2 определён как для HTTP URI (то есть без шифрования), так и для HTTPS URI (поверх TLS 1.2 и выше).

Хотя стандарт определяет шифрование как необязательное[15], для большинства клиентских реализаций (Firefox[16], Chrome, Safari, Opera, IE, Edge) возможно использование HTTP/2 только поверх TLS.

Поддержка

править

Популярные веб-браузеры в основном поддерживают HTTP/2 с конца 2015 года[17]:

  • Chrome и другие, основанные на Chromium/Blink, поддерживают HTTP/2. Поддерживается только режим HTTP/2 поверх TLS[18].
  • Chrome for iOS поддерживает HTTP/2.
  • Firefox поддерживает HTTP/2 с версии 36[19]. Экспериментальная поддержка HTTP/2 была изначально обеспечена в версии 34[20][21]. Поддерживается только режим HTTP/2 поверх TLS[22].
  • Internet Explorer поддерживает HTTP/2 с версии 11, но только для Windows 8.1. Поддерживается только режим HTTP/2 поверх TLS[23].
  • Microsoft Edge поддерживает HTTP/2.
  • Opera, как основанный на Chromium/Blink, поддерживает HTTP/2 с начала 2014 года.
  • Safari 9 поддерживает HTTP/2.

Поддержка веб-серверами[17]:

19 декабря 2016 года Google объявила, что Googlebot теперь поддерживает HTTP/2[27].

См. также

править

Примечания

править
  1. Bright, Peter. HTTP/2 finished, coming to browsers within weeks. Ars Technica (18 февраля 2015). Дата обращения: 25 августа 2015. Архивировано 2 декабря 2017 года.
  2. Thomson, M. (ed. ), Belshe M. and R. Peon Hypertext Transfer Protocol version 2 - draft-ietf-httpbis-http2-16. ietf.org. HTTPbis Working Group. Дата обращения: 11 февраля 2015. Архивировано 2 сентября 2015 года.
  3. Hypertext Transfer Protocol Bis (httpbis) - Charter. Internet Engineering Task Force (2012). Дата обращения: 25 августа 2015. Архивировано 2 июля 2013 года.
  4. History for draft-ietf-httpbis-http2-16. IETF. — «"2014-12-16 IESG state changed to Publication Requested"». Дата обращения: 3 января 2015. Архивировано 22 декабря 2015 года.
  5. Raymor, Brian. Wait for it – HTTP/2 begins Working Group Last Call! Microsoft Open Technologies (7 августа 2014). Дата обращения: 7 сентября 2014. Архивировано из оригинала 6 октября 2014 года.
  6. The IESG (2015-02-17). "Protocol Action: 'Hypertext Transfer Protocol version 2' to Proposed Standard (draft-ietf-httpbis-http2-17.txt)". httpbis (Mailing list). Архивировано 8 декабря 2015. Дата обращения: 18 февраля 2015.
  7. Mark Nottingham. HTTP/2 Approved. www.ietf.org. Internet Engineering Task Force (18 февраля 2015). Дата обращения: 8 марта 2015. Архивировано из оригинала 20 февраля 2015 года.
  8. RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2). IETF (май 2015). Дата обращения: 14 мая 2015. Архивировано 23 июня 2015 года.
  9. Sebastian Anthony. S&M vs. SPDY: Microsoft and Google battle over the future of HTTP 2.0. ExtremeTech (28 марта 2012). Дата обращения: 25 августа 2015. Архивировано 10 июля 2013 года.
  10. Can the rise of SPDY threaten HTTP? blog.restlet.com. Restlet, Inc. (октябрь 2011). Дата обращения: 25 августа 2015. Архивировано из оригинала 6 января 2014 года.
  11. Hello HTTP/2, Goodbye SPDY. Дата обращения: 1 ноября 2019. Архивировано 1 ноября 2019 года.
  12. Historical trends in the usage of site elements for websites. W3Techs (2021).
  13. Почему HTTP/2 является бинарным? Stack Overflow на русском. Дата обращения: 15 апреля 2020. Архивировано 20 июля 2021 года.
  14. Протокол HTTP/2: что это, преимущества и как им пользоваться | Блог VPS.ua. vps.ua. Дата обращения: 15 апреля 2020. Архивировано 13 мая 2020 года.
  15. HTTP/2 Frequently Asked Questions. http2.github.io. Дата обращения: 12 февраля 2016. Архивировано 27 сентября 2014 года.
  16. Networking/http2 - MozillaWiki. wiki.mozilla.org. Дата обращения: 12 февраля 2016. Архивировано 7 сентября 2014 года.
  17. 1 2 Implementations - http2. Дата обращения: 12 декабря 2015. Архивировано 30 июня 2017 года.
  18. Nottingham, Mark. Strengthening HTTP: A Personal View (4 января 2014). Дата обращения: 8 октября 2014. Архивировано 11 марта 2015 года. (section «Enter Snowden»)
  19. Bug 1097320. Bugzilla@Mozilla (26 ноября 2014). Дата обращения: 24 января 2015. Архивировано 25 января 2015 года.
  20. Patrick McManus. Bug 1047594 - Enable http/2 (and alpn) by default. Bugzilla@Mozilla (3 октября 2014). Дата обращения: 8 октября 2014. Архивировано 13 октября 2015 года.
  21. Firefox Notes (34.0.5). Mozilla (1 декабря 2014). Дата обращения: 2 декабря 2014. Архивировано 2 декабря 2014 года.
  22. MozillaWiki. «Networking/http2» Архивная копия от 7 сентября 2014 на Wayback Machine
  23. Rob Trace, David Walp. HTTP/2: The Long-Awaited Sequel. Microsoft (8 октября 2014). Дата обращения: 8 октября 2014. Архивировано 10 октября 2014 года.
  24. Rob Trace; David Walp.: HTTP/2: The Long-Awaited Sequel. MSDN IEBlog. Microsoft Corporation (8 октября 2014). Дата обращения: 25 августа 2015. Архивировано 10 октября 2014 года.
  25. HTTP/2 support via mod_http2 module. Дата обращения: 15 октября 2015. Архивировано 11 октября 2015 года.
  26. NGINX Open Source 1.9.5 Released with HTTP/2 Support. www.nginx.com. Дата обращения: 12 октября 2015. Архивировано 23 сентября 2015 года.
  27. Twitter: Google Webmasters

Ссылки

править

Спецификации

  • RFC 7540 — Hypertext Transfer Protocol version 2 (HTTP/2)
  • RFC 7541 — HPACK: Header Compression for HTTP/2