Mercurial > hg > nginx-quic
comparison src/http/v3/ngx_http_v3.h @ 8692:0d3bf08eaac0 quic
HTTP/3: allowed QUIC stream connection reuse.
A QUIC stream connection is treated as reusable until first bytes of request
arrive, which is also when the request object is now allocated. A connection
closed as a result of draining, is reset with the error code
H3_REQUEST_REJECTED. Such behavior is allowed by quic-http-34:
Once a request stream has been opened, the request MAY be cancelled
by either endpoint. Clients cancel requests if the response is no
longer of interest; servers cancel requests if they are unable to or
choose not to respond.
When the server cancels a request without performing any application
processing, the request is considered "rejected." The server SHOULD
abort its response stream with the error code H3_REQUEST_REJECTED.
The client can treat requests rejected by the server as though they had
never been sent at all, thereby allowing them to be retried later.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 18 Oct 2021 15:47:06 +0300 |
parents | 72b304f6207c |
children | 606bf52888d2 |
comparison
equal
deleted
inserted
replaced
8691:925572184d4a | 8692:0d3bf08eaac0 |
---|---|
88 ngx_quic_finalize_connection(c->quic->parent, code, reason) | 88 ngx_quic_finalize_connection(c->quic->parent, code, reason) |
89 | 89 |
90 #define ngx_http_v3_shutdown_connection(c, code, reason) \ | 90 #define ngx_http_v3_shutdown_connection(c, code, reason) \ |
91 ngx_quic_shutdown_connection(c->quic->parent, code, reason) | 91 ngx_quic_shutdown_connection(c->quic->parent, code, reason) |
92 | 92 |
93 #define ngx_http_v3_connection(c) \ | |
94 ((c)->quic ? ngx_http_quic_get_connection(c)->addr_conf->http3 : 0) | |
95 | |
93 | 96 |
94 typedef struct { | 97 typedef struct { |
95 size_t max_table_capacity; | 98 size_t max_table_capacity; |
96 ngx_uint_t max_blocked_streams; | 99 ngx_uint_t max_blocked_streams; |
97 ngx_uint_t max_concurrent_pushes; | 100 ngx_uint_t max_concurrent_pushes; |
136 ngx_connection_t *known_streams[NGX_HTTP_V3_MAX_KNOWN_STREAM]; | 139 ngx_connection_t *known_streams[NGX_HTTP_V3_MAX_KNOWN_STREAM]; |
137 }; | 140 }; |
138 | 141 |
139 | 142 |
140 void ngx_http_v3_init(ngx_connection_t *c); | 143 void ngx_http_v3_init(ngx_connection_t *c); |
144 void ngx_http_v3_reset_connection(ngx_connection_t *c); | |
141 ngx_int_t ngx_http_v3_init_session(ngx_connection_t *c); | 145 ngx_int_t ngx_http_v3_init_session(ngx_connection_t *c); |
142 ngx_int_t ngx_http_v3_check_flood(ngx_connection_t *c); | 146 ngx_int_t ngx_http_v3_check_flood(ngx_connection_t *c); |
143 | 147 |
144 ngx_int_t ngx_http_v3_read_request_body(ngx_http_request_t *r); | 148 ngx_int_t ngx_http_v3_read_request_body(ngx_http_request_t *r); |
145 ngx_int_t ngx_http_v3_read_unbuffered_request_body(ngx_http_request_t *r); | 149 ngx_int_t ngx_http_v3_read_unbuffered_request_body(ngx_http_request_t *r); |