aboutsummaryrefslogtreecommitdiff
path: root/src/http/v2/ngx_http_v2_module.c
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@nginx.com>2023-06-08 16:56:46 +0400
committerSergey Kandaurov <pluknet@nginx.com>2023-06-08 16:56:46 +0400
commit6915d2fb2e88e0c339fe37b37ce14f5fe446c1c6 (patch)
tree7abd9b350b80b07a2c96583025621151dffe1ba5 /src/http/v2/ngx_http_v2_module.c
parentd32f66f1e8dc81a0edbadbacf74191684a653d09 (diff)
downloadnginx-6915d2fb2e88e0c339fe37b37ce14f5fe446c1c6.tar.gz
nginx-6915d2fb2e88e0c339fe37b37ce14f5fe446c1c6.zip
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
Diffstat (limited to 'src/http/v2/ngx_http_v2_module.c')
-rw-r--r--src/http/v2/ngx_http_v2_module.c111
1 files changed, 19 insertions, 92 deletions
diff --git a/src/http/v2/ngx_http_v2_module.c b/src/http/v2/ngx_http_v2_module.c
index 09396a50b..62af9a543 100644
--- a/src/http/v2/ngx_http_v2_module.c
+++ b/src/http/v2/ngx_http_v2_module.c
@@ -27,8 +27,6 @@ static void *ngx_http_v2_create_loc_conf(ngx_conf_t *cf);
static char *ngx_http_v2_merge_loc_conf(ngx_conf_t *cf, void *parent,
void *child);
-static char *ngx_http_v2_push(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
-
static char *ngx_http_v2_recv_buffer_size(ngx_conf_t *cf, void *post,
void *data);
static char *ngx_http_v2_pool_size(ngx_conf_t *cf, void *post, void *data);
@@ -105,9 +103,9 @@ static ngx_command_t ngx_http_v2_commands[] = {
{ ngx_string("http2_max_concurrent_pushes"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
- ngx_conf_set_num_slot,
- NGX_HTTP_SRV_CONF_OFFSET,
- offsetof(ngx_http_v2_srv_conf_t, concurrent_pushes),
+ ngx_http_v2_obsolete,
+ 0,
+ 0,
NULL },
{ ngx_string("http2_max_requests"),
@@ -168,15 +166,15 @@ static ngx_command_t ngx_http_v2_commands[] = {
{ ngx_string("http2_push_preload"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
- ngx_conf_set_flag_slot,
- NGX_HTTP_LOC_CONF_OFFSET,
- offsetof(ngx_http_v2_loc_conf_t, push_preload),
+ ngx_http_v2_obsolete,
+ 0,
+ 0,
NULL },
{ ngx_string("http2_push"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
- ngx_http_v2_push,
- NGX_HTTP_LOC_CONF_OFFSET,
+ ngx_http_v2_obsolete,
+ 0,
0,
NULL },
@@ -326,7 +324,6 @@ ngx_http_v2_create_srv_conf(ngx_conf_t *cf)
h2scf->pool_size = NGX_CONF_UNSET_SIZE;
h2scf->concurrent_streams = NGX_CONF_UNSET_UINT;
- h2scf->concurrent_pushes = NGX_CONF_UNSET_UINT;
h2scf->preread_size = NGX_CONF_UNSET_SIZE;
@@ -348,8 +345,6 @@ ngx_http_v2_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_uint_value(conf->concurrent_streams,
prev->concurrent_streams, 128);
- ngx_conf_merge_uint_value(conf->concurrent_pushes,
- prev->concurrent_pushes, 10);
ngx_conf_merge_size_value(conf->preread_size, prev->preread_size, 65536);
@@ -370,17 +365,8 @@ ngx_http_v2_create_loc_conf(ngx_conf_t *cf)
return NULL;
}
- /*
- * set by ngx_pcalloc():
- *
- * h2lcf->pushes = NULL;
- */
-
h2lcf->chunk_size = NGX_CONF_UNSET_SIZE;
- h2lcf->push_preload = NGX_CONF_UNSET;
- h2lcf->push = NGX_CONF_UNSET;
-
return h2lcf;
}
@@ -393,72 +379,6 @@ ngx_http_v2_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_size_value(conf->chunk_size, prev->chunk_size, 8 * 1024);
- ngx_conf_merge_value(conf->push, prev->push, 1);
-
- if (conf->push && conf->pushes == NULL) {
- conf->pushes = prev->pushes;
- }
-
- ngx_conf_merge_value(conf->push_preload, prev->push_preload, 0);
-
- return NGX_CONF_OK;
-}
-
-
-static char *
-ngx_http_v2_push(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{
- ngx_http_v2_loc_conf_t *h2lcf = conf;
-
- ngx_str_t *value;
- ngx_http_complex_value_t *cv;
- ngx_http_compile_complex_value_t ccv;
-
- value = cf->args->elts;
-
- if (ngx_strcmp(value[1].data, "off") == 0) {
-
- if (h2lcf->pushes) {
- return "\"off\" parameter cannot be used with URI";
- }
-
- if (h2lcf->push == 0) {
- return "is duplicate";
- }
-
- h2lcf->push = 0;
- return NGX_CONF_OK;
- }
-
- if (h2lcf->push == 0) {
- return "URI cannot be used with \"off\" parameter";
- }
-
- h2lcf->push = 1;
-
- if (h2lcf->pushes == NULL) {
- h2lcf->pushes = ngx_array_create(cf->pool, 1,
- sizeof(ngx_http_complex_value_t));
- if (h2lcf->pushes == NULL) {
- return NGX_CONF_ERROR;
- }
- }
-
- cv = ngx_array_push(h2lcf->pushes);
- if (cv == NULL) {
- return NGX_CONF_ERROR;
- }
-
- ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
-
- ccv.cf = cf;
- ccv.value = &value[1];
- ccv.complex_value = cv;
-
- if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
- return NGX_CONF_ERROR;
- }
-
return NGX_CONF_OK;
}
@@ -562,10 +482,17 @@ ngx_http_v2_obsolete(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_conf_deprecated_t *d = cmd->post;
- ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
- "the \"%s\" directive is obsolete, "
- "use the \"%s\" directive instead",
- d->old_name, d->new_name);
+ if (d) {
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "the \"%s\" directive is obsolete, "
+ "use the \"%s\" directive instead",
+ d->old_name, d->new_name);
+
+ } else {
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "the \"%V\" directive is obsolete, ignored",
+ &cmd->name);
+ }
return NGX_CONF_OK;
}