Интерфейс HttpResponse.PushPromiseHandler<T>
- Параметры типа:
-
T- тип тела ответа на запрос о подтверждении
- Вложенный интерфейс:
- HttpResponse<T>
public static interface HttpResponse.PushPromiseHandler<T>
Запрос о подтверждении — это синтетический запрос, отправленный сервером HTTP/2 при получении начального запроса клиента. Сервер определил, возможно, проанализировав начальный запрос, что клиенту, скорее всего, потребуется запрошенная ресурс, и поэтому отправляет синтетический запрос в виде запроса о подтверждении клиенту. Клиент может принять или отклонить запрос о подтверждении.
Запрос о подтверждении может быть получен до момента, когда тело ответа на начальный запрос клиента будет полностью получено. Однако доставка ответа на запрос о подтверждении не координируется с доставкой ответа на начальный запрос клиента.
- С:
- 11
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyPushPromise |
Уведомление о входящем запросе о подтверждении. |
static <T> HttpResponse.PushPromiseHandler<T> |
of |
Возвращает обработчик запросов о подтверждении, который накапливает запросы о подтверждении и их ответы в заданной карте. |
Подробное описание методов
applyPushPromise
void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>,CompletableFuture<HttpResponse<T>>> acceptor)
Этот метод вызывается один раз для каждого полученного запроса о подтверждении, до момента, когда тело ответа на начальный запрос клиента будет полностью получено.
Запрос о подтверждении принимается вызовом заданной acceptor функции. Функция acceptor должна принять непустую BodyHandler, которая будет использоваться для обработки тела ответа на запрос. Функция-акцептор вернет
CompletableFuture, который завершит работу с ответом на запрос.
Если функция acceptor не вызвана успешно, то запрос о подтверждении отклоняется. Функция acceptor бросит исключение IllegalStateException если вызвана более одного раза.
- Параметры:
-
initiatingRequest- начальный запрос клиента -
pushPromiseRequest- синтетический запрос подтверждения -
acceptor- функция акцептора, которая должна быть успешно вызвана для принятия запроса подтверждения
of
static <T> HttpResponse.PushPromiseHandler<T> of(Function<HttpRequest,HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest,CompletableFuture<HttpResponse<T>>> pushPromisesMap)
Элементы добавляются в заданную карту для каждого принятого запроса о подтверждении. Ключ элемента — запрос подтверждения, а значение — CompletableFuture , который завершает работу с ответом, соответствующим запросу подтверждения. Запрос подтверждения отклоняется/отменяется, если в карте уже есть запись, ключ которой равен ему. Запрос подтверждения отклоняется/отменяется, если у него нет того же происхождения, что и у начального запроса.
Элементы добавляются в заданную карту как можно быстрее при получении и принятии запроса подтверждения. Таким образом, код, использующий такую карту как кэш, может определить, был ли запрос подтверждения отправлен сервером, и избежать, возможно, ненужных запросов.
Доставка ответа на запрос подтверждения не координируется с доставкой ответа на начальный запрос клиента. Однако, когда тело ответа на начальный запрос клиента будет полностью получено, карта гарантированно будет полностью заполнена, то есть больше записей добавляться не будет. Индивидуальные CompletableFutures в карте могут или могут не быть завершены на этом этапе.
- Параметры типа:
-
T- тип тела ответа на запрос подтверждения - Параметры:
-
pushPromiseHandler- обработчик тела для использования в запросах подтверждения -
pushPromisesMap- карта для накопления запросов подтверждения - Возвращает:
- обработчик запросов подтверждения
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpResponse.PushPromiseHandler.html