Opened 2 years ago

Closed 2 years ago

#2325 closed defect (invalid)

Server chooses hq-interop instead of h3

Reported by: David Hu Owned by:
Priority: minor Milestone:
Component: http/3 Version:
Keywords: http3 Cc: David Hu
uname -a: Linux [REDACTED] 5.16.10-arch1-1 #1 SMP PREEMPT Wed, 16 Feb 2022 19:35:18 +0000 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.21.7
built with OpenSSL 3.0.1+quic 14 Dec 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-debug --with-http_ssl_module --with-http_v2_module --with-stream_quic_module --with-http_v3_module --with-cc-opt='-I/usr/local/include/openssl -O0 -DNGX_HTTP_V3_HQ=1' --with-ld-opt=-L/usr/local/lib64

Description (last modified by David Hu)

When compiled with -DNGX_HTTP_V3_HQ=1
And specified the directives

    listen     http3 reuseport;
    listen     http2 ssl reuseport;
    listen              [::]:443 http3;
    listen              [::]:443 http2 ssl reuseport;

in the virtual host block

quic_retry on;
http3_hq on;
http3_push on;

in the http block
Some clients are unable to connect to the server
Debug logs

2022/02/22 02:41:27 [debug] 27685#0: *99 SSL ALPN supported by client: h3
2022/02/22 02:41:27 [debug] 27685#0: *99 quic ngx_quic_send_alert() level:init alert:120
2022/02/22 02:41:27 [debug] 27685#0: *99 quic SSL_quic_read_level:0 SSL_quic_write_level:0
2022/02/22 02:41:27 [debug] 27685#0: *99 SSL_do_handshake: -1
2022/02/22 02:41:27 [debug] 27685#0: *99 SSL_get_error: 1
2022/02/22 02:41:27 [error] 27685#0: *99 SSL_do_handshake() failed (SSL: error:0A0000EB:SSL routines::no application protocol) while handling frames, client: [REDACTED], server: [::]:443
2022/02/22 02:41:27 [debug] 27685#0: *99 quic packet done rc:-1 level:init decr:1 pn:1 perr:0
2022/02/22 02:41:27 [debug] 27685#0: *99 quic close initiated rc:-1
2022/02/22 02:41:27 [debug] 27685#0: *99 quic close immediate due to error: 376 handshake failed

Change History (3)

comment:1 by David Hu, 2 years ago

oops, I selected the wrong component, can someone correct it?

comment:2 by David Hu, 2 years ago

Description: modified (diff)

comment:3 by Sergey Kandaurov, 2 years ago

Component: documentationhttp/3
Resolution: invalid
Status: newclosed

The http3_hq directive switches HTTP/3 to a special application protocol used mainly in QUIC protocol interoperability testing and negotiated with ALPN token "hq-interop". As such, it's not for use with conventional HTTP/3 clients.

Note: See TracTickets for help on using tickets.