Зачем нам HTTP / 2, когда у нас есть WebSockets? Ну и зачем нам WebSockets, когда у нас есть TCP? Или даже IP? Протоколы - это, в основном, согласованные стандарты, которые могут быть реализованы независимыми сторонами.
WebSockets хороши для двусторонней связи, но в большинстве случаев они неструктурированы и специфики приложения c. HTTP (в основном) представляет собой серию односторонних запросов к серверу (запросить ресурс, получить ответ) - хотя HTTP / 2 немного улучшает это с HTTP / 2 pu sh, и теоретически уровень двоичного кадрирования может быть использовал больше для правильного двухстороннего пу sh. Таким образом, полная двусторонняя природа WebSockets - то, в чем они хороши, - на самом деле не нужна для большинства случаев использования HTTP.
Глядя на HTTP, он имеет различные дополнительные функции, которых нет в WebSockets. Включая определенные методы, заголовки и сжатие. Это позволяет получить четкое понимание между различными реализациями HTTP, чтобы упростить обмен данными для его варианта использования, включая такие функции, как мультиплексирование , кэширование, сжатие, перенаправления, обработка ошибок ... et c. Если бы вам пришлось заново изобрести все это поверх WebSockets (это очень сырой протокол), вы бы получили протокол, подобный HTTP / 2.
Может ли HTTP / 2 использовать WebSockets, чтобы действовать как это базовый транспортный уровень? Возможно, но это ненужный дополнительный уровень абстракции (IP-> TCP-> WS-> HTTP2-> HTTP), не говоря уже о том, что веб-сокеты часто изначально устанавливаются через HTTP. HTTP достаточно велик, чтобы иметь собственный транспортный протокол, поэтому фактически они пошли другим путем и указали WebSockets по HTTP / 2 .
Наконец, следует также отметить, что HTTP / 2 также не делает Web-сокеты устаревшими . Они разные и имеют разные преимущества и недостатки.