Hi,
I discussed the issue about recursive pushes with nghttp2's author.
I'll quote his reply here:
"recursive" pushes are not allowed in HTTP/2.
https://tools.ietf.org/html/rfc7540#section-6.6
PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that
is in either the "open" or "half-closed (remote)" state. The stream
identifier of a PUSH_PROMISE frame indicates the stream it is
associated with. If the stream identifier field specifies the value
0x0, a recipient MUST respond with a connection error (Section 5.4.1)
of type PROTOCOL_ERROR.
If jetty performs "recursive" pushes, then it violates RFC 7540.
I believe recursive push is wrong thing. If firefox or chrome accept them, and actually utilize them, its their serious bug. You can report this to their respective bug tracker.
I think jetty team confused with the legacy SPDY specification. In SPDY, it does not say recursive push is not prohibited. jetty just inherited it from SPDY without carefully reading RFC 7540. It is definitely jetty's bug.