#2432 closed enhancement (fixed)

deprecate HTTP/2 Server Push and port to 103 Early Hints

Reported by: adrelanos@… Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.23.x
Keywords: Cc: adrelanos@…
uname -a:
nginx -V: 1.23.x


HTTP/2 Server Push (the link: HTTP header) has been deprecated:

  • developer.chrome.com/blog/removing-push/

It is being replaced by 103 Early Hints:

  • developer.chrome.com/blog/early-hints/
  • developer.mozilla.org/en-US/docs/Web/HTTP/Status/103

Change History (3)

comment:1 by Maxim Dounin, 19 months ago

Priority: majorminor
Type: defectenhancement

I do agree that HTTP/2 Server Push support needs to be removed. It is mostly equivalent to "Link: rel=preload" HTTP header, and adds little to no value (or even negative value, as per Chrome study).

Note though that implementing 103 Early Hints is a separate thing. Further, it will require some major work to be done, as currently nginx has no infrastructure to handle 1xx informational responses.

comment:2 by Sergey Kandaurov <pluknet@…>, 14 months ago

In 9121:262c01782566/nginx:

HTTP/2: removed server push (ticket #2432).

Although it has better implementation status than HTTP/3 server push,
it remains of limited use, with adoption numbers seen as negligible.
Per IETF 102 materials, server push was used only in 0.04% of sessions.
It was considered to be "difficult to use effectively" in RFC 9113.
Its use is further limited by badly matching to fetch/cache/connection
models in browsers, see related discussions linked from [1].

Server push was disabled in Chrome 106 [2].

The http2_push, http2_push_preload, and http2_max_concurrent_pushes
directives are made obsolete. In particular, this essentially reverts
7201:641306096f5b and 7207:3d2b0b02bd3d.

[1] https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/
[2] https://chromestatus.com/feature/6302414934114304

comment:3 by Maxim Dounin, 14 months ago

Resolution: fixed
Status: newclosed

HTTP/2 server push support has been removed in nginx 1.25.1. Recommended replacement, if at all, is to use Link: rel=preload HTTP header.

Closing this. Thanks to all involved.

Note: See TracTickets for help on using tickets.