summaryrefslogtreecommitdiffhomepage
path: root/src/http/v3/ngx_http_v3_module.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2023-09-13QUIC: "handshake_timeout" configuration parameter.Roman Arutyunyan1-2/+6
Previously QUIC did not have such parameter and handshake duration was controlled by HTTP/3. However that required creating and storing HTTP/3 session on first client datagram. Apparently there's no convenient way to store the session object until QUIC handshake is complete. In the followup patches session creation will be postponed to init() callback.
2023-05-12HTTP/3: removed server push support.Roman Arutyunyan1-130/+2
2023-05-11QUIC: removed "quic_mtu" directive.Roman Arutyunyan1-37/+0
The directive used to set the value of the "max_udp_payload_size" transport parameter. According to RFC 9000, Section 18.2, the value specifies the size of buffer for reading incoming datagrams: This limit does act as an additional constraint on datagram size in the same way as the path MTU, but it is a property of the endpoint and not the path; see Section 14. It is expected that this is the space an endpoint dedicates to holding incoming packets. Current QUIC implementation uses the maximum possible buffer size (65527) for reading datagrams.
2023-02-27HTTP/3: "quic" parameter of "listen" directive.Roman Arutyunyan1-25/+25
Now "listen" directve has a new "quic" parameter which enables QUIC protocol for the address. Further, to enable HTTP/3, a new directive "http3" is introduced. The hq-interop protocol is enabled by "http3_hq" as before. Now application protocol is chosen by ALPN. Previously used "http3" parameter of "listen" is deprecated.
2022-11-30QUIC: application init() callback.Roman Arutyunyan1-0/+1
It's called after handshake completion or prior to the first early data stream creation. The callback should initialize application-level data before creating streams. HTTP/3 callback implementation sets keepalive timer and sends SETTINGS. Also, this allows to limit max handshake time in ngx_http_v3_init_stream().
2022-10-19QUIC: idle mode for main connection.Roman Arutyunyan1-0/+2
Now main QUIC connection for HTTP/3 always has c->idle flag set. This allows the connection to receive worker shutdown notification. It is passed to application level via a new conf->shutdown() callback. The HTTP/3 shutdown callback sends GOAWAY to client and gracefully shuts down the QUIC connection.
2022-01-18QUIC: the "quic_active_connection_id_limit" directive.Vladimir Homutov1-0/+12
The directive sets corresponding transport parameter and limits number of created client ids.
2021-12-06QUIC: simplified configuration.Vladimir Homutov1-196/+34
Directives that set transport parameters are removed from the configuration. Corresponding values are derived from the quic configuration or initialized to default. Whenever possible, quic configuration parameters are taken from higher-level protocol settings, i.e. HTTP/3.
2021-12-01HTTP/3: $http3 variable.Roman Arutyunyan1-7/+25
A new variable $http3 is added. The variable equals to "h3" for HTTP/3 connections, "hq" for hq connections and is an empty string otherwise. The variable $quic is eliminated. The new variable is similar to $http2 variable.
2021-12-04HTTP/3: http3_hq directive and NGX_HTTP_V3_HQ macro.Roman Arutyunyan1-0/+16
Listen quic parameter is no longer supported.
2021-12-06HTTP/3: merged ngx_http_quic_module into ngx_http_v3_module.Roman Arutyunyan1-1/+430
2021-08-04HTTP/3: replaced macros with values.Roman Arutyunyan1-8/+4
2021-07-29HTTP/3: http3_max_uni_streams directive.Roman Arutyunyan1-0/+12
The directive limits the number of uni streams client is allowed to create.
2021-05-31HTTP/3: removed $http3 that served its purpose.Sergey Kandaurov1-50/+1
To specify final protocol version by hand: add_header Alt-Svc h3=":443";
2021-02-16HTTP/3: removed http3_max_field_size.Roman Arutyunyan1-12/+0
Instead, size of one large_client_header_buffers buffer is used.
2020-07-23HTTP/3: server pushes.Roman Arutyunyan1-2/+131
New directives are added: - http3_max_concurrent_pushes - http3_push - http3_push_preload
2020-07-23Style: moved function declarations to match usual code style.Roman Arutyunyan1-11/+9
Plus a few other minor style changes.
2020-07-23HTTP/3: renamed server configuration variables from v3cf to h3scf.Roman Arutyunyan1-7/+7
Now they are similar to HTTP/2 where they are called h2scf.
2020-07-21QUIC: added "quic" listen parameter.Roman Arutyunyan1-243/+0
The parameter allows processing HTTP/0.9-2 over QUIC. Also, introduced ngx_http_quic_module and moved QUIC settings there
2020-07-02HTTP/3: refactored dynamic table implementation.Roman Arutyunyan1-0/+24
Previously dynamic table was not functional because of zero limit on its size set by default. Now the following changes enable it: - new directives to set SETTINGS_QPACK_MAX_TABLE_CAPACITY and SETTINGS_QPACK_BLOCKED_STREAMS - send settings with SETTINGS_QPACK_MAX_TABLE_CAPACITY and SETTINGS_QPACK_BLOCKED_STREAMS to the client - send Insert Count Increment to the client - send Header Acknowledgement to the client - evict old dynamic table entries on overflow - decode Required Insert Count from client - block stream if Required Insert Count is not reached
2020-06-29HTTP/3: http3_max_field_size directive to limit string size.Roman Arutyunyan1-0/+12
Client streams may send literal strings which are now limited in size by the new directive. The default value is 4096. The directive is similar to HTTP/2 directive http2_max_field_size.
2020-05-29QUIC draft-28 transport parameters support.Sergey Kandaurov1-1/+3
Draft-27 and draft-28 support can now be enabled interchangeably, it's based on the compile-time macro NGX_QUIC_DRAFT_VERSION.
2020-05-29Renamed max_packet_size to max_udp_payload_size, from draft-28.Sergey Kandaurov1-14/+15
No functional changes.
2020-05-14Address validation using Retry packets.Sergey Kandaurov1-0/+18
The behaviour is toggled with the new directive "quic_retry on|off". QUIC token construction is made suitable for issuing with NEW_TOKEN.
2020-04-22HTTP/3: directives with limited values converted to post handler.Sergey Kandaurov1-30/+50
The purpose is to show a precise line number with an invalid value.
2020-04-22HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.Sergey Kandaurov1-15/+15
This allows to specify directive values with measurement units.
2020-04-16Added handling of incorrect values in TP configuration.Vladimir Homutov1-4/+30
Some parameters have minimal/maximum values defined by standard.
2020-04-15Added primitive flow control mechanisms.Vladimir Homutov1-4/+6
+ MAX_STREAM_DATA frame is sent when recv() is performed on stream The new value is a sum of total bytes received by stream + free space in a buffer; The sending of MAX_STREM_DATA frame in response to STREAM_DATA_BLOCKED frame is adjusted to follow the same logic as above. + MAX_DATA frame is sent when total amount of received data is 2x of current limit. The limit is doubled. + Default values of transport parameters are adjusted to more meaningful values: initial stream limits are set to quic buffer size instead of unrealistically small 255. initial max data is decreased to 16 buffer sizes, in an assumption that this is enough for a relatively short connection, instead of randomly chosen big number. All this allows to initiate a stable flow of streams that does not block on stream/connection limits (tested with FF 77.0a1 and 100K requests)
2020-03-28HTTP/3: http3 variable.Sergey Kandaurov1-0/+24
2020-03-23Respect QUIC max_idle_timeout.Roman Arutyunyan1-1/+1
2020-03-23Limit output QUIC packets with client max_packet_size.Roman Arutyunyan1-3/+6
Additionally, receive larger packets than 512 bytes.
2020-03-20Adedd the http "quic" variable.Vladimir Homutov1-1/+52
The value is literal "quic" for requests passed over HTTP/3, and empty string otherwise.
2020-03-20Configurable transport parameters.Vladimir Homutov1-2/+180
- integer parameters can be configured using the following directives: quic_max_idle_timeout quic_max_ack_delay quic_max_packet_size quic_initial_max_data quic_initial_max_stream_data_bidi_local quic_initial_max_stream_data_bidi_remote quic_initial_max_stream_data_uni quic_initial_max_streams_bidi quic_initial_max_streams_uni quic_ack_delay_exponent quic_active_migration quic_active_connection_id_limit - only following parameters are actually sent: active_connection_id_limit initial_max_streams_uni initial_max_streams_bidi initial_max_stream_data_bidi_local initial_max_stream_data_bidi_remote initial_max_stream_data_uni (other parameters are to be added into ngx_quic_create_transport_params() function as needed, should be easy now) - draft 24 and draft 27 are now supported (at compile-time using quic_version macro)
2020-03-13HTTP/3.Roman Arutyunyan1-0/+46