aboutsummaryrefslogtreecommitdiff
path: root/src/http/v3/ngx_http_v3_request.c
Commit message (Collapse)AuthorAge
...
* HTTP/3: client pseudo-headers restrictions.Roman Arutyunyan2021-01-22
| | | | | | - :method, :path and :scheme are expected exactly once and not empty - :method and :scheme character validation is added - :authority cannot appear more than once
* HTTP/3: refactored request parser.Roman Arutyunyan2021-01-22
| | | | | The change reduces diff to the default branch for src/http/ngx_http_request.c and src/http/ngx_http_parse.c.
* HTTP/3: staticize ngx_http_v3_methods.Sergey Kandaurov2020-12-16
|
* HTTP/3: introduced ngx_http_v3_filter.Roman Arutyunyan2020-11-27
| | | | | | | The filter is responsible for creating HTTP/3 response header and body. The change removes differences to the default branch for ngx_http_chunked_filter_module and ngx_http_header_filter_module.
* HTTP/3: eliminated r->method_start.Roman Arutyunyan2020-11-25
| | | | | | The field was introduced to ease parsing HTTP/3 requests. The change reduces diff to the default branch.
* QUIC: renamed c->qs to c->quic.Roman Arutyunyan2020-11-10
|
* HTTP/3: skip unknown frames on request stream.Roman Arutyunyan2020-08-24
| | | | | | | | | | As per HTTP/3 draft 29, section 4.1: Frames of unknown types (Section 9), including reserved frames (Section 7.2.8) MAY be sent on a request or push stream before, after, or interleaved with other frames described in this section. Also, trailers frame is now used as an indication of the request body end.
* HTTP/3: fixed handling request body eof.Roman Arutyunyan2020-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | While for HTTP/1 unexpected eof always means an error, for HTTP/3 an eof right after a DATA frame end means the end of the request body. For this reason, since adding HTTP/3 support, eof no longer produced an error right after recv() but was passed to filters which would make a decision. This decision was made in ngx_http_parse_chunked() and ngx_http_v3_parse_request_body() based on the b->last_buf flag. Now that since 0f7f1a509113 (1.19.2) rb->chunked->length is a lower threshold for the expected number of bytes, it can be set to zero to indicate that more bytes may or may not follow. Now it's possible to move the check for eof from parser functions to ngx_http_request_body_chunked_filter() and clean up the parsing code. Also, in the default branch, in case of eof, the following three things happened, which were replaced with returning NGX_ERROR while implementing HTTP/3: - "client prematurely closed connection" message was logged - c->error flag was set - NGX_HTTP_BAD_REQUEST was returned The change brings back this behavior for HTTP/1 as well as HTTP/3.
* HTTP/3: fixed context storage in request body parser.Sergey Kandaurov2020-08-18
|
* HTTP/3: server pushes.Roman Arutyunyan2020-07-23
| | | | | | | New directives are added: - http3_max_concurrent_pushes - http3_push - http3_push_preload
* HTTP/3: support $server_protocol variable.Roman Arutyunyan2020-07-14
| | | | Now it holds "HTTP/3.0". Previously it was empty.
* HTTP/3: encode frame ids with ngx_http_v3_encode_varlen_int().Roman Arutyunyan2020-07-13
| | | | | Even though typically frame ids fit into a single byte, calling ngx_http_v3_encode_varlen_int() adds to the code clarity.
* HTTP/3: generate Location response header for absolute redirects.Roman Arutyunyan2020-07-23
|
* HTTP/3: header encoding functions.Roman Arutyunyan2020-07-13
|
* HTTP/3: close QUIC connection with HTTP/QPACK errors when needed.Roman Arutyunyan2020-07-02
| | | | | | | | Previously errors led only to closing streams. To simplify closing QUIC connection from a QUIC stream context, new macro ngx_http_v3_finalize_connection() is introduced. It calls ngx_quic_finalize_connection() for the parent connection.
* HTTP/3: refactored dynamic table implementation.Roman Arutyunyan2020-07-02
| | | | | | | | | | | | | | | 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
* HTTP/3: fixed dropping first non-pseudo header.Roman Arutyunyan2020-06-26
|
* HTTP/3: do not emit a DATA frame header for header_only responses.Sergey Kandaurov2020-06-25
| | | | This resulted in the frame error due to the invalid DATA frame length.
* Fixed client buffer reallocation for HTTP/3.Roman Arutyunyan2020-05-19
| | | | | | | | | | Preserving pointers within the client buffer is not needed for HTTP/3 because all data is either allocated from pool or static. Unlike with HTTP/1, data typically cannot be referenced directly within the client buffer. Trying to preserve NULLs or external pointers lead to broken pointers. Also, reverted changes in ngx_http_alloc_large_header_buffer() not relevant for HTTP/3 to minimize diff to mainstream.
* Fixed $request_length for HTTP/3.Roman Arutyunyan2020-05-19
| | | | | | | | | New field r->parse_start is introduced to substitute r->request_start and r->header_name_start for request length accounting. These fields only work for this purpose in HTTP/1 because HTTP/1 request line and header line start with these values. Also, error logging is now fixed to output the right part of the request.
* HTTP/3: restricted symbols in header names.Roman Arutyunyan2020-05-19
| | | | | | | | | | | | | | | | | As per HTTP/3 draft 27, a request or response containing uppercase header field names MUST be treated as malformed. Also, existing rules applied when parsing HTTP/1 header names are also applied to HTTP/3 header names: - null character is not allowed - underscore character may or may not be treated as invalid depending on the value of "underscores_in_headers" - all non-alphanumeric characters with the exception of '-' are treated as invalid Also, the r->locase_header field is now filled while parsing an HTTP/3 header. Error logging for invalid headers is fixed as well.
* HTTP/3: split header parser in two functions.Roman Arutyunyan2020-05-19
| | | | | | | | The first one parses pseudo-headers and is analagous to the request line parser in HTTP/1. The second one parses regular headers and is analogous to the header parser in HTTP/1. Additionally, error handling of client passing malformed uri is now fixed.
* Assorted fixes.Sergey Kandaurov2020-05-20
| | | | Found by Clang Static Analyzer.
* HTTP/3: fixed reading request body.Roman Arutyunyan2020-04-13
|
* Parsing HTTP/3 request body.Roman Arutyunyan2020-03-27
|
* Chunked response body in HTTP/3.Roman Arutyunyan2020-03-27
|
* Fixed buffer overflow.Roman Arutyunyan2020-03-27
|
* Removed unused variable.Roman Arutyunyan2020-03-20
|
* Fixed header creation for header_only responses in HTTP/3.Roman Arutyunyan2020-03-19
|
* HTTP/3 $request_line variable.Roman Arutyunyan2020-03-18
|
* Fixed pointer increment while parsing HTTP/3 header.Roman Arutyunyan2020-03-18
|
* Refactored HTTP/3 parser.Roman Arutyunyan2020-03-18
|
* Temporary fix for header null-termination in HTTP/3.Roman Arutyunyan2020-03-14
|
* HTTP/3.Roman Arutyunyan2020-03-13