HTTP/3: do not push until a MAX_PUSH_ID frame is received.
Fixes interop with quic-go that doesn't send MAX_PUSH_ID.
This commit is contained in:
parent
141d5113a5
commit
e1aca15496
2 changed files with 6 additions and 3 deletions
|
@ -787,7 +787,7 @@ ngx_http_v3_push_resource(ngx_http_request_t *r, ngx_str_t *path,
|
|||
h3scf = ngx_http_get_module_srv_conf(r, ngx_http_v3_module);
|
||||
|
||||
ngx_log_debug5(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||
"http3 push \"%V\" pushing:%ui/%ui id:%uL/%uL",
|
||||
"http3 push \"%V\" pushing:%ui/%ui id:%uL/%L",
|
||||
path, h3c->npushing, h3scf->max_concurrent_pushes,
|
||||
h3c->next_push_id, h3c->max_push_id);
|
||||
|
||||
|
@ -797,7 +797,9 @@ ngx_http_v3_push_resource(ngx_http_request_t *r, ngx_str_t *path,
|
|||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
if (h3c->next_push_id > h3c->max_push_id) {
|
||||
if (h3c->max_push_id == (uint64_t) -1
|
||||
|| h3c->next_push_id > h3c->max_push_id)
|
||||
{
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||
"http3 abort pushes due to max_push_id");
|
||||
return NGX_ABORT;
|
||||
|
|
|
@ -62,6 +62,7 @@ ngx_http_v3_init_session(ngx_connection_t *c)
|
|||
|
||||
h3c->hc = *phc;
|
||||
h3c->hc.http3 = 1;
|
||||
h3c->max_push_id = (uint64_t) -1;
|
||||
|
||||
ngx_queue_init(&h3c->blocked);
|
||||
ngx_queue_init(&h3c->pushing);
|
||||
|
@ -762,7 +763,7 @@ ngx_http_v3_set_max_push_id(ngx_connection_t *c, uint64_t max_push_id)
|
|||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||
"http3 MAX_PUSH_ID:%uL", max_push_id);
|
||||
|
||||
if (max_push_id < h3c->max_push_id) {
|
||||
if (h3c->max_push_id != (uint64_t) -1 && max_push_id < h3c->max_push_id) {
|
||||
return NGX_HTTP_V3_ERR_ID_ERROR;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue