Интерфейс HttpResponse.PushPromiseHandler<T>
- Параметры типа:
T- тип тела ответа push-обещания
- Внешний интерфейс:
HttpResponse<T>
public static interface HttpResponse.PushPromiseHandler<T>
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 |
Уведомление о первом входящем push-обещании HTTP/3. |
void |
applyPushPromise |
Уведомление о входящем push-обещании. |
default void |
notifyAdditionalPromise |
Вызывается для каждого дополнительного push-обещания HTTP/3. |
static <T> HttpResponse.PushPromiseHandler |
of |
Возвращает обработчик push-обещаний, который накапливает push-обещания и ответы на них в указанной карте. |
Подробное описание методов
applyPushPromise
void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor)
Этот метод вызывается для каждого полученного 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)
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)
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-запрос, а значением — объект CompletableFuture, выполнение которого завершается ответом, соответствующим push-запросу, указанному в ключе. Push-запрос отклоняется / отменяется, если в карте уже есть запись с равным ему ключом (равным). Push-запрос отклоняется / отменяется, если его источник отличается от источника инициирующего запроса.
Записи добавляются в указанную карту как можно скорее после получения и принятия push-обещания. Благодаря этому код, использующий такую карту, например, в качестве кэша, может определить, было ли отправлено сервером push-обещание, и избежать, возможно, ненужных запросов.
Доставка ответа на push-обещание не согласуется с доставкой ответа на инициирующий запрос, отправленный клиентом. Однако после полного получения тела ответа на инициирующий запрос, отправленный клиентом, карта гарантированно будет заполнена полностью, то есть новые записи добавляться уже не будут. Отдельные объекты CompletableFutures в карте к этому моменту могут быть завершены, а могут и не быть.
- Параметры типа:
T- тип тела ответа push-обещания- Параметры:
-
pushPromiseHandler- обработчик тела, используемый для push-обещаний -
pushPromisesMap- карта для накопления push-обещаний - Возвращает:
- обработчик push-обещаний
© 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.