Полезная нагрузка HTTP/2 Push JSON

В большинстве случаев использование http/2 push-уведомлений сервера — это упреждающая отправка файлов активов (таких как файлы javascript и css) в браузер. Мне интересно, можно ли использовать push-сервер http/2 для отправки динамической полезной нагрузки, такой как документы JSON, в клиентское приложение? В http://http2.github.io/http2-spec/index.html#PushResources об этом ничего не говорится. Кто-нибудь может рассказать об этом подробнее? Почему или почему нет?


person Alex    schedule 21.06.2016    source источник


Ответы (2)


HTTP/2 не предназначен для замены веб-сокетов, поскольку вы делаете запрос (например, веб-страницу) и можете вернуть несколько ресурсов (например, веб-страницу, CSS, необходимый для отображения веб-страницы, JavaScript, необходимый для запуска этой веб-страницы. .. и т.д.).

Таким образом, HTTP/2 не является действительно двунаправленным, поскольку он по-прежнему отвечает на первоначальный запрос.

Так что, если вы собираетесь отправить запрос JSON в ответ на первоначальный запрос, это нормально — это просто еще один ресурс, почти такой же, как CSS и javascript.

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

В этом вопросе есть некоторые дополнительные сведения о HTTP/2 по сравнению с веб-сокетами: Делает ли HTTP/2 веб-сокеты устаревшими ?

person Barry Pollard    schedule 21.06.2016
comment
Этот ответ на вопрос Делает ли HTTP/2 веб-сокеты устаревшими? говорит, что я думаю, что HTTP/2 делает устаревшие веб-сокеты для большинства случаев использования, но, возможно, не для всех, и далее ... делает ли HTTP/2 устаревшие лучшая работа по включению двунаправленной потоковой передачи в браузере, и я думаю, что да, это так. - person Nikola Obreshkov; 13.10.2017
comment
Это интересный способ вытолкнуть HTTP/2 за пределы его первоначального намерения и может работать в определенных сценариях (gRPC — интересная концептуальная версия такого приложения), однако я бы сказал, что это, вероятно, излишне для большинства приложений по сравнению с более легкой реализацией стиля веб-сокета. . Кроме того, все это должно быть построено поверх HTTP/2, поэтому, возвращаясь к исходному вопросу, нет простого способа передать динамические полезные нагрузки, такие как документы JSON, изначально в любых реализациях клиента или сервера HTTP/2 после первоначального ответа. . - person Barry Pollard; 13.10.2017
comment
Ну, я должен сказать «любые текущие реализации клиента и сервера HTTP/2, о которых я знаю» :-) - person Barry Pollard; 13.10.2017

Да, вы можете использовать HTTP/2 Push для отправки любых типов ресурсов. Но имейте в виду следующее:

  • Как сказал BazzaDP, HTTP/2 Push не механизм push-уведомлений. Но HTTP/2 отлично подходит для длительных опросов, а затем у вас есть сжатие кодирования контента, шифрование, заголовки HTTP и управление потоком, поэтому в 90% случаев вы все равно можете и, вероятно, должны пропускать веб-сокеты. Обратите внимание, что при длительном опросе HTTP/2 Push не требуется. Также обратите внимание, что есть нечто, называемое Server. Отправленные события, которые являются поддерживаемой браузером версией длинного опроса.

  • HTTP/2 Push пока прозрачен для приложения. Это означает, что вы должны сделать Push и запрос ресурса из вашего приложения.

  • На данный момент приложению доступны только кэшируемые вещи. Это означает, что вам нужно установить заголовки кеша в динамически сгенерированном ответе JSON. Возможно, вы можете установить короткий срок действия или длинный, но с динамическим URL-адресом.

person dsign    schedule 22.06.2016