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 \