aws / s2n-quic

An implementation of the IETF QUIC protocol
https://crates.io/crates/s2n-quic
Apache License 2.0
1.14k stars 121 forks source link

HTTP3 interop test with Kwik client fails #1461

Open ptrd opened 2 years ago

ptrd commented 2 years ago

Problem:

The HTTP3 interop (https://interop.seemann.io/) test with Kwik client fails. See for example https://interop.seemann.io/logs/2022-08-18T00:39/s2n-quic_kwik/http3/

Solution:

I analysed an earlier instance of this error (https://interop.seemann.io/logs/2022-08-17T08:08/s2n-quic_kwik/http3/server/logs.txt), and it's clear the handshake succeeds and also server seems to receive the stream frames containing the HTTP requests, given these log statements: 1.475277847s s2n_quic:server:conn: frame_received: packet_header=OneRtt { number: 1 } path=Path { local_addr: [::ffff:193.167.100.100]:443, local_cid: 0x32c3d6bed6eafa3d7dddca0d86178bf1, remote_addr: [::ffff:193.167.0.100]:37317, remote_cid: 0xb17bdd76a0bb381f, id: 0, is_active: true } frame=Stream { id: 2, offset: 1, len: 6, is_fin: false } [3mid[0m[2m=[0m0 1.475371748s s2n_quic:server:conn: frame_received: packet_header=OneRtt { number: 1 } path=Path { local_addr: [::ffff:193.167.100.100]:443, local_cid: 0x32c3d6bed6eafa3d7dddca0d86178bf1, remote_addr: [::ffff:193.167.0.100]:37317, remote_cid: 0xb17bdd76a0bb381f, id: 0, is_active: true } frame=Stream { id: 4, offset: 0, len: 32, is_fin: true } [3mid[0m[2m=[0m0 1.475487949s s2n_quic:server:conn: frame_received: packet_header=OneRtt { number: 1 } path=Path { local_addr: [::ffff:193.167.100.100]:443, local_cid: 0x32c3d6bed6eafa3d7dddca0d86178bf1, remote_addr: [::ffff:193.167.0.100]:37317, remote_cid: 0xb17bdd76a0bb381f, id: 0, is_active: true } frame=Stream { id: 8, offset: 0, len: 32, is_fin: true } [3mid[0m[2m=[0m0 1.475573050s s2n_quic:server:conn: frame_received: packet_header=OneRtt { number: 1 } path=Path { local_addr: [::ffff:193.167.100.100]:443, local_cid: 0x32c3d6bed6eafa3d7dddca0d86178bf1, remote_addr: [::ffff:193.167.0.100]:37317, remote_cid: 0xb17bdd76a0bb381f, id: 0, is_active: true } frame=Stream { id: 12, offset: 0, len: 32, is_fin: true } [3mid[0m[2m=[0m0

Furthermore, on the client side i see the client receiving an Ack for the stream frames, so from the perspective of the client everything is ok and a server response is being expected. However, server does not send stream frames for the HTTP request streams (4, 8, 12).

Requirements / Acceptance Criteria:

Out of scope:

WesleyRosenblum commented 2 years ago

Thanks Peter. I dug into this, and haven't been able to find any issue with the s2n-quic server itself. I've opened an issue to hyperium/h3, which is the HTTP/3 implementation we use for this interop test.