T
- the push promise response body typeHttpResponse<T>
public static interface HttpResponse.PushPromiseHandler<T>
A push promise is a synthetic request sent by an HTTP/2 server when retrieving an initiating client-sent request. The server has determined, possibly through inspection of the initiating request, that the client will likely need the promised resource, and hence pushes a synthetic push request, in the form of a push promise, to the client. The client can choose to accept or reject the push promise request.
A push promise request may be received up to the point where the response body of the initiating client-sent request has been fully received. The delivery of a push promise response, however, is not coordinated with the delivery of the response to the initiating client-sent request.
Modifier and Type | Method | Description |
---|---|---|
void |
applyPushPromise |
Notification of an incoming push promise. |
static <T> HttpResponse.PushPromiseHandler |
of |
Returns a push promise handler that accumulates push promises, and their responses, into the given map. |
void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>,CompletableFuture<HttpResponse<T>>> acceptor)
This method is invoked once for each push promise received, up to the point where the response body of the initiating client-sent request has been fully received.
A push promise is accepted by invoking the given acceptor
function. The acceptor
function must be passed a non-null BodyHandler
, that is to be used to handle the promise's response body. The acceptor function will return a
CompletableFuture
that completes with the promise's response.
If the acceptor
function is not successfully invoked, then the push promise is rejected. The acceptor
function will throw an IllegalStateException
if invoked more than once.
initiatingRequest
- the initiating client-send requestpushPromiseRequest
- the synthetic push requestacceptor
- the acceptor function that must be successfully invoked to accept the push promisestatic <T> HttpResponse.PushPromiseHandler<T> of(Function<HttpRequest,HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest,CompletableFuture<HttpResponse<T>>> pushPromisesMap)
Entries are added to the given map for each push promise accepted. The entry's key is the push request, and the entry's value is a CompletableFuture
that completes with the response corresponding to the key's push request. A push request is rejected / cancelled if there is already an entry in the map whose key is equal to it. A push request is rejected / cancelled if it does not have the same origin as its initiating request.
Entries are added to the given map as soon as practically possible when a push promise is received and accepted. That way code, using such a map like a cache, can determine if a push promise has been issued by the server and avoid making, possibly, unnecessary requests.
The delivery of a push promise response is not coordinated with the delivery of the response to the initiating client-sent request. However, when the response body for the initiating client-sent request has been fully received, the map is guaranteed to be fully populated, that is, no more entries will be added. The individual CompletableFutures
contained in the map may or may not already be completed at this point.
T
- the push promise response body typepushPromiseHandler
- t he body handler to use for push promisespushPromisesMap
- a map to accumulate push promises into
© 1993, 2023, 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/21/docs/api/java.net.http/java/net/http/HttpResponse.PushPromiseHandler.html