bryancall commented on issue #13334: URL: https://github.com/apache/trafficserver/issues/13334#issuecomment-4835455089
Thanks, the detailed capture made this reproducible. I tracked it down: the origin (deepwiki, on Vercel) is sending a `103 Early Hints` interim response before the final `200` on the HTTP/2 connection from ATS to the origin. Apache Traffic Server's origin-side HTTP/2 code currently does not handle 1xx interim responses correctly. It merges the interim headers and the final response headers together, which produces a duplicate `:status` pseudo-header and trips the HTTP/2 header validation. ATS then resets the stream and reports it as "Server closed connection while reading response header," even though the origin never closed the connection (your packet capture confirms that, no FIN or RST). One detail worth noting: the `103 Early Hints` only appears when the request carries the usual browser navigation headers (the `sec-fetch-*` set, `accept-encoding` including `zstd`, and so on). A plain request does not trigger it, which is why it shows up from a real browser through the proxy but not from simple command-line tools. Workaround until this is fixed: remove `h2` from `proxy.config.ssl.client.alpn_protocols` (leaving `http/1.1`). ATS will then speak HTTP/1.1 to the origin, where this does not occur. I confirmed that makes the same request succeed. I have a fix for the HTTP/2 origin path and I am preparing a pull request with a test. I will link it here. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
