Version: 9.4.9.v20180320 |

Configuring HTTP/2 Push
Previous | Chapter 16. HTTP/2 Home | Next

##### Contact the core Jetty developers at www.webtide.com

private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development

## Configuring HTTP/2 Push

HTTP/2 Push is a mechanism that allows the server to send multiple resources to the client for a single client request. This will reduce the amount of round-trips necessary to retrieve all the resources that make up a web page and can significantly improve the page load time.

HTTP/2 Push can be automated in your application by configuring a `PushCacheFilter` in the `web.xml`, in this way:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        metadata-complete="true"
        version="3.1">

        ...
        <filter>
            <filter-name>PushFilter</filter-name>
            <filter-class>org.eclipse.jetty.servlets.PushCacheFilter</filter-class>
            <async-supported>true</async-supported>
        </filter>
        <filter-mapping>
            <filter-name>PushFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        ...

    </web-app>

`PushCacheFilter` analyzes the HTTP requests for resources that arrive to your web application. Some of these requests contain the HTTP `Referer` header that points to a resource that has been requested previously.

This allows the `PushCacheFilter` to organize resources in a tree, for example a root `index.html` resource having two children resources, `styles.css` and `application.js`, and `styles.css` having a child resource, `background.png`. The root resource is called the primary resource, while descendant resources are called secondary resources.

The resource tree is built using a time window so that when a root resource is requested, only subsequent requests that are made within the time window will be added to the resource tree. The resource tree can also be limited in size so that the number of secondary resources associated to a primary resource is limited.

By default, only the resource path (without the query string) is used to associate secondary resources to the primary resource, but you can configure `PushCacheFilter` to take the query string into account.

`PushCacheFilter` can be configured with the following `init-params`:

- `associatePeriod`: the time window, in milliseconds, within which a request for a secondary resource will be associated to a primary resource; defaults to 4000 ms
- `maxAssociations`: the max number of secondary resources that may be associated to a primary resource; defaults to 16
- `hosts`: a comma separated list of hosts that are allowed in the `Referer` header; defaults to the host in the `Host` header
- `ports`: a comma separated list of ports that are allowed in the `Referer` header; defaults to the port in the `Host` header
- `useQueryInKey`: a boolean indicating whether the query string of the request should be considered when associating secondary resources to primary resources; defaults to `false`

Previous | Top | Next
Configuring HTTP/2 | Home | Configuring HAProxy and Jetty

See an error or something missing? Contribute to this documentation at Github!(Generated: 2018-03-20)