Mercurial > hg > nginx
comparison src/http/v2/ngx_http_v2.h @ 9121:262c01782566
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
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 08 Jun 2023 16:56:46 +0400 |
parents | 08ef02ad5c54 |
children | cdda286c0f1b |
comparison
equal
deleted
inserted
replaced
9120:0aaa09927703 | 9121:262c01782566 |
---|---|
21 #define NGX_HTTP_V2_MAX_FRAME_SIZE ((1 << 24) - 1) | 21 #define NGX_HTTP_V2_MAX_FRAME_SIZE ((1 << 24) - 1) |
22 | 22 |
23 #define NGX_HTTP_V2_INT_OCTETS 4 | 23 #define NGX_HTTP_V2_INT_OCTETS 4 |
24 #define NGX_HTTP_V2_MAX_FIELD \ | 24 #define NGX_HTTP_V2_MAX_FIELD \ |
25 (127 + (1 << (NGX_HTTP_V2_INT_OCTETS - 1) * 7) - 1) | 25 (127 + (1 << (NGX_HTTP_V2_INT_OCTETS - 1) * 7) - 1) |
26 | |
27 #define NGX_HTTP_V2_STREAM_ID_SIZE 4 | |
28 | 26 |
29 #define NGX_HTTP_V2_FRAME_HEADER_SIZE 9 | 27 #define NGX_HTTP_V2_FRAME_HEADER_SIZE 9 |
30 | 28 |
31 /* frame types */ | 29 /* frame types */ |
32 #define NGX_HTTP_V2_DATA_FRAME 0x0 | 30 #define NGX_HTTP_V2_DATA_FRAME 0x0 |
65 | 63 |
66 typedef struct { | 64 typedef struct { |
67 ngx_flag_t enable; | 65 ngx_flag_t enable; |
68 size_t pool_size; | 66 size_t pool_size; |
69 ngx_uint_t concurrent_streams; | 67 ngx_uint_t concurrent_streams; |
70 ngx_uint_t concurrent_pushes; | |
71 size_t preread_size; | 68 size_t preread_size; |
72 ngx_uint_t streams_index_mask; | 69 ngx_uint_t streams_index_mask; |
73 } ngx_http_v2_srv_conf_t; | 70 } ngx_http_v2_srv_conf_t; |
74 | 71 |
75 | 72 |
134 ngx_uint_t processing; | 131 ngx_uint_t processing; |
135 ngx_uint_t frames; | 132 ngx_uint_t frames; |
136 ngx_uint_t idle; | 133 ngx_uint_t idle; |
137 ngx_uint_t priority_limit; | 134 ngx_uint_t priority_limit; |
138 | 135 |
139 ngx_uint_t pushing; | |
140 ngx_uint_t concurrent_pushes; | |
141 | |
142 size_t send_window; | 136 size_t send_window; |
143 size_t recv_window; | 137 size_t recv_window; |
144 size_t init_window; | 138 size_t init_window; |
145 | 139 |
146 size_t frame_size; | 140 size_t frame_size; |
163 ngx_queue_t dependencies; | 157 ngx_queue_t dependencies; |
164 ngx_queue_t closed; | 158 ngx_queue_t closed; |
165 | 159 |
166 ngx_uint_t closed_nodes; | 160 ngx_uint_t closed_nodes; |
167 ngx_uint_t last_sid; | 161 ngx_uint_t last_sid; |
168 ngx_uint_t last_push; | |
169 | 162 |
170 time_t lingering_time; | 163 time_t lingering_time; |
171 | 164 |
172 unsigned settings_ack:1; | 165 unsigned settings_ack:1; |
173 unsigned table_update:1; | 166 unsigned table_update:1; |
174 unsigned blocked:1; | 167 unsigned blocked:1; |
175 unsigned goaway:1; | 168 unsigned goaway:1; |
176 unsigned push_disabled:1; | |
177 }; | 169 }; |
178 | 170 |
179 | 171 |
180 struct ngx_http_v2_node_s { | 172 struct ngx_http_v2_node_s { |
181 ngx_uint_t id; | 173 ngx_uint_t id; |
301 void ngx_http_v2_init(ngx_event_t *rev); | 293 void ngx_http_v2_init(ngx_event_t *rev); |
302 | 294 |
303 ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r); | 295 ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r); |
304 ngx_int_t ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r); | 296 ngx_int_t ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r); |
305 | 297 |
306 ngx_http_v2_stream_t *ngx_http_v2_push_stream(ngx_http_v2_stream_t *parent, | |
307 ngx_str_t *path); | |
308 | |
309 void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc); | 298 void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc); |
310 | 299 |
311 ngx_int_t ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c); | 300 ngx_int_t ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c); |
312 | 301 |
313 | 302 |
405 #define NGX_HTTP_V2_STATUS_304_INDEX 11 | 394 #define NGX_HTTP_V2_STATUS_304_INDEX 11 |
406 #define NGX_HTTP_V2_STATUS_400_INDEX 12 | 395 #define NGX_HTTP_V2_STATUS_400_INDEX 12 |
407 #define NGX_HTTP_V2_STATUS_404_INDEX 13 | 396 #define NGX_HTTP_V2_STATUS_404_INDEX 13 |
408 #define NGX_HTTP_V2_STATUS_500_INDEX 14 | 397 #define NGX_HTTP_V2_STATUS_500_INDEX 14 |
409 | 398 |
410 #define NGX_HTTP_V2_ACCEPT_ENCODING_INDEX 16 | |
411 #define NGX_HTTP_V2_ACCEPT_LANGUAGE_INDEX 17 | |
412 #define NGX_HTTP_V2_CONTENT_LENGTH_INDEX 28 | 399 #define NGX_HTTP_V2_CONTENT_LENGTH_INDEX 28 |
413 #define NGX_HTTP_V2_CONTENT_TYPE_INDEX 31 | 400 #define NGX_HTTP_V2_CONTENT_TYPE_INDEX 31 |
414 #define NGX_HTTP_V2_DATE_INDEX 33 | 401 #define NGX_HTTP_V2_DATE_INDEX 33 |
415 #define NGX_HTTP_V2_LAST_MODIFIED_INDEX 44 | 402 #define NGX_HTTP_V2_LAST_MODIFIED_INDEX 44 |
416 #define NGX_HTTP_V2_LOCATION_INDEX 46 | 403 #define NGX_HTTP_V2_LOCATION_INDEX 46 |
417 #define NGX_HTTP_V2_SERVER_INDEX 54 | 404 #define NGX_HTTP_V2_SERVER_INDEX 54 |
418 #define NGX_HTTP_V2_USER_AGENT_INDEX 58 | |
419 #define NGX_HTTP_V2_VARY_INDEX 59 | 405 #define NGX_HTTP_V2_VARY_INDEX 59 |
420 | 406 |
421 #define NGX_HTTP_V2_PREFACE_START "PRI * HTTP/2.0\r\n" | 407 #define NGX_HTTP_V2_PREFACE_START "PRI * HTTP/2.0\r\n" |
422 #define NGX_HTTP_V2_PREFACE_END "\r\nSM\r\n\r\n" | 408 #define NGX_HTTP_V2_PREFACE_END "\r\nSM\r\n\r\n" |
423 #define NGX_HTTP_V2_PREFACE NGX_HTTP_V2_PREFACE_START \ | 409 #define NGX_HTTP_V2_PREFACE NGX_HTTP_V2_PREFACE_START \ |