Spec-Zone.ru › OpenJDK 27

Интерфейс HttpResponse.PushPromiseHandler<T>

Параметры типа:
T - тип тела ответа push-обещания
Внешний интерфейс:
HttpResponse<T>
public static interface HttpResponse.PushPromiseHandler<T>
Обработчик push-обещаний.

Push-обещание — это синтетический запрос, отправляемый сервером HTTP/2 или HTTP/3 при обработке инициирующего запроса, отправленного клиентом. Сервер, возможно изучив инициирующий запрос, определяет, что клиенту, вероятно, потребуется обещанный ресурс, и поэтому отправляет клиенту синтетический push-запрос в форме push-обещания. Клиент может принять или отклонить запрос push-обещания.

Для HTTP/2 запрос push-обещания может быть получен до момента полного получения тела ответа на инициирующий запрос, отправленный клиентом. Однако доставка ответа на push-обещание не согласуется с доставкой ответа на инициирующий запрос, отправленный клиентом. Они доставляются с помощью метода applyPushPromise(HttpRequest, HttpRequest, Function).

Для HTTP/3 push-обещания обрабатываются аналогичным образом, за исключением того, что один и тот же ресурс (URI запроса, заголовки запроса и тело ответа) может быть обещан несколько раз, но сервер доставляет его (и этот API) только один раз с помощью метода applyPushPromise(HttpRequest, HttpRequest, PushId, Function). О последующих обещаниях того же ресурса уведомляет только метод notifyAdditionalPromise(HttpRequest, PushId). Для каждого из этих уведомлений передается один и тот же HttpResponse.PushPromiseHandler.PushId. Кроме того, push-обещания HTTP/3 не ограничены контекстом одного инициирующего запроса. Одно и то же push-обещание может быть доставлено, а затем о нем может быть отправлено уведомление для нескольких запросов, инициированных клиентом в рамках одного и того же соединения HTTP/3 (QUIC).

С момента:
11

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static interface  HttpResponse.PushPromiseHandler.PushId
Представляет PushID в HTTP/3.

Краткое описание методов

Модификатор и тип Метод Описание
default void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, HttpResponse.PushPromiseHandler.PushId pushid, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor)
Уведомление о первом входящем push-обещании HTTP/3.
void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor)
Уведомление о входящем push-обещании.
default void notifyAdditionalPromise(HttpRequest initiatingRequest, HttpResponse.PushPromiseHandler.PushId pushid)
Вызывается для каждого дополнительного push-обещания HTTP/3.
static <T> HttpResponse.PushPromiseHandler<T> of(Function<HttpRequest, HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest, CompletableFuture<HttpResponse<T>>> pushPromisesMap)
Возвращает обработчик push-обещаний, который накапливает push-обещания и ответы на них в указанной карте.

Подробное описание методов

applyPushPromise

void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor)
Уведомление о входящем push-обещании.

Этот метод вызывается для каждого полученного push-обещания до момента полного получения тела ответа на инициирующий запрос, отправленный клиентом.

Push-обещание принимается вызовом указанной функции acceptor. Функции acceptor необходимо передать ненулевой объект BodyHandler, который будет использоваться для обработки тела ответа на обещание. Функция-приемник возвращает объект CompletableFuture, выполнение которого завершается ответом на обещание.

Если функция acceptor не была успешно вызвана, push-обещание отклоняется. При повторном вызове функция acceptor выбрасывает исключение IllegalStateException.

Этот метод вызывается для всех push-обещаний HTTP/2, а также по умолчанию для первого push-обещания HTTP/3. Если переопределен метод applyPushPromise(HttpRequest, HttpRequest, PushId, Function), этот метод напрямую не вызывается для push-обещаний HTTP/3.

Параметры:
initiatingRequest - инициирующий запрос, отправленный клиентом
pushPromiseRequest - синтетический push-запрос
acceptor - функция-приемник, которую необходимо успешно вызвать, чтобы принять push-обещание

applyPushPromise

default void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, HttpResponse.PushPromiseHandler.PushId pushid, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor)
Уведомление о первом входящем push-обещании HTTP/3. О последующих обещаниях того же ресурса (с тем же PushId) уведомляет метод notifyAdditionalPromise(HttpRequest, PushId).

Этот метод вызывается для каждого полученного push-обещания до момента полного получения тела ответа на инициирующий запрос, отправленный клиентом.

Push-обещание принимается вызовом указанной функции acceptor. Функции acceptor необходимо передать ненулевой объект BodyHandler, который будет использоваться для обработки тела ответа на обещание. Функция-приемник возвращает объект CompletableFuture, выполнение которого завершается ответом на обещание.

Если функция acceptor не была успешно вызвана, push-обещание отклоняется. При повторном вызове функция acceptor выбрасывает исключение IllegalStateException.

Требования к реализации:
реализация по умолчанию вызывает applyPushPromise(HttpRequest, HttpRequest, Function). Это позволяет PushPromiseHandlers из предыдущих выпусков разумным образом обрабатывать push-обещания HTTP/3.
Параметры:
initiatingRequest - запрос клиента, в результате которого возникло обещание
pushPromiseRequest - обещанный сервером HttpRequest
pushid - PushId, который можно связать с последующими уведомлениями
acceptor - функция-приемник, которую необходимо успешно вызвать, чтобы принять push-обещание
С момента:
26

notifyAdditionalPromise

default void notifyAdditionalPromise(HttpRequest initiatingRequest, HttpResponse.PushPromiseHandler.PushId pushid)
Вызывается для каждого дополнительного push-обещания HTTP/3. Объект pushid связывает обещание с исходным обещанным HttpRequest и HttpResponse. Дополнительные обещания обычно возникают в результате разных запросов, инициированных клиентом.
Требования к реализации:
Реализация этого метода по умолчанию ничего не делает.
Параметры:
initiatingRequest - запрос, инициированный клиентом, который привел к push-обещанию
pushid - pushid, о котором, возможно, уже отправлялось уведомление
С момента:
26

of

static <T> HttpResponse.PushPromiseHandler<T> of(Function<HttpRequest, HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest, CompletableFuture<HttpResponse<T>>> pushPromisesMap)
Возвращает обработчик push-обещаний, который накапливает push-обещания и ответы на них в указанной карте.

Для каждого принятого push-обещания в указанную карту добавляется запись. Ключом записи является push-запрос, а значением — объект CompletableFuture, выполнение которого завершается ответом, соответствующим push-запросу, указанному в ключе. Push-запрос отклоняется / отменяется, если в карте уже есть запись с равным ему ключом (равным). Push-запрос отклоняется / отменяется, если его источник отличается от источника инициирующего запроса.

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

Доставка ответа на push-обещание не согласуется с доставкой ответа на инициирующий запрос, отправленный клиентом. Однако после полного получения тела ответа на инициирующий запрос, отправленный клиентом, карта гарантированно будет заполнена полностью, то есть новые записи добавляться уже не будут. Отдельные объекты CompletableFutures в карте к этому моменту могут быть завершены, а могут и не быть.

Параметры типа:
T - тип тела ответа push-обещания
Параметры:
pushPromiseHandler - обработчик тела, используемый для push-обещаний
pushPromisesMap - карта для накопления push-обещаний
Возвращает:
обработчик push-обещаний

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API